b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

SQL特殊字符处理的基本方法

电脑杂谈  发布时间:2020-07-10 06:21:28  来源:网络整理

sql like 单个字符_sql 不包含某个字符_sql 特殊字符 @

请务必特别注意用户可能输入的引号和尖括号等特殊字符,因为它们可能会导致严重的安全问题. SQL注入的基本技术之一是使用不过滤单引号的安全漏洞.

用户的输入只不过有两个目的: 操作或在页面上显示它. 下面介绍这两种情况下特殊字符的处理.

1. 在上操作

当用户输入的数据用于操作时,它分为两种情况,一种是执行写操作,另一种是作为查询条件.

1.1库编写操作

(插入和更新都被视为写入操作,以插入为例进行说明,更新处理相同)

Insert语句或AddNew方法通常用于编写库. 我们先来看一下插入语句:

DIM用户名,sqlstr

用户名= trim(Request.Form(“ uname”))

sqlstr =“插入[userinfo](用户名)值('” && username&“')”

以SQL Server为例,以这种方式编写库. 如果用户名包含单引号('),将发生错误. 使用以下自定义函数来转换单引号:

Rem转换SQL非法字符

函数SQLEncode(fString)

如果isull(fString)然后

SQLEncode =“”

退出功能

如果结束

SQLEncode = replace(fString,“'”,“''”)

结束功能

上面的函数将一个单引号转换为两个连续的单引号,可以使用一个单引号接受和写入这些引号. SQL语句已更改为:

sqlstr =“插入[userinfo](用户名)值(''”&SQLEncode(username)&“')”

再次查看AddNew方法:

DIM用户名

用户名= trim(Request.Form(“ uname”))

sql like 单个字符_sql 不包含某个字符_sql 特殊字符 @

'MyRst是Recordset对象,MyConn是Connection对象

MyRst.open“ [userinfo]”,MyConn,0,3

MyRst.AddNew

MyRst(“用户名”). 值=用户名

MyRst.Update

MyRst.Close

以这种方式编写库时,无需调用SQLEncode()即可转换单引号,将自行处理.

对于存储过程的参数,不需要转换单引号.

建议您使用存储过程进行操作. 正如我在“ ASP和存储过程”一文中解释的那样. 否则,建议使用AddNew方法编写该库,这样做的好处不仅是避免处理单引号,而且本文对此不做深入讨论.

1.2用户输入作为查询条件

网络教学网络

如果用户输入的数据作为查询条件显示在where子句中,则无论where子句是更新语句,删除语句还是选择语句,都必须转换单引号.

2. 用户输入的数据将显示为输出并显示在页面上

我们仅讨论不允许用户使用HTML代码的情况,也就是说,即使用户输入HTML代码,数据也不会以HTML代码的形式显示. 至于允许用户使用HTML代码的情况,它更为复杂,将在稍后的特殊文章中进行讨论.

未经处理,不得显示用户输入的数据. 如果其中包含HTML或js代码,则使页面混乱是一件小事,甚至可以摆脱硬盘驱动器.

页面上显示的数据可以由用户直接输入或从中获取. 可以看出,在仓储时上述处理仅转换为单引号,而尖括号和双引号等特殊字符未处理. 在输出时我们将对其进行处理.

ASP中的server.HTMLEncode()方法可以将许多字符转换为“ HTML字符”,例如sql 特殊字符 @,> to>,等等.

在页面上显示数据之前,可以使用server.HTMLEncode()进行转换. 但是,此方法不会转换回车符和空格,这会导致以下问题: 如果用户通过textarea控件输入数据,则输出时将不保留原始格式,不仅没有回车符和换行符,而且多个空格. 将显示为一个. 为了解决这个问题,我们使用以下自定义函数:

Rem转换非法的HTML字符以显示输出

函数HTMLEncode(fString)

如果不是isnull(fString),则

fString = Replace(fString,“>”,“>”)

fString = Replace(fString,“ <”,“ <”)

fString = Replace(fString,CHR(34),“”“)'双引号

sql 不包含某个字符_sql like 单个字符_sql 特殊字符 @

fString = Replace(fString,CHR(39),“'”)'单引号

fString = Replace(fString,CHR(32)&CHR(32),“”)'空格

fString = Replace(fString,CHR(9),“”)'标签键值

fString = Replace(fString,CHR(10),“
”)'换行符

fString = Replace(fString,CHR(13),“”)'输入

HTMLEncode = fString

如果结束

结束功能

调用上述函数并通过textarea控件输出输入的数据,您将获得满意的结果.

如果数据以表单控件输出,则无论使用哪种控件,都可以使用server.HTMLEncode()方法转换字符,即使对于textarea控件也不会造成问题. 尽管笔架返回空间尚未转换,但可以在此控件中识别出来. 但是,server.HTMLEncode()方法不会转换单引号. 因此,控件的值必须使用双引号: Webjx.Com

<输入类型=文本名称= uname值=“”“&服务器. HTMLEncode(用户名)&”“”>

否则,如果用户输入''onclick = javascript: ....,以上代码将显示为:

<输入类型=文本名称= uname值=''onclick = javascript: ...>

JavaScript命令可以做很多事情.

以上内容大致描述了通过用户两次使用数据输入来处理特殊字符的过程. 还有另一种情况: 用户输入用作GET请求的参数值. 例如,通过以下URL向服务器发送请求: test.asp?username = MyName

我通常只提交这种类型的数字数据,并在接收时验证数据类型. 如果是字符数据,如何处理特殊字符?有兴趣的朋友考虑一下,呵呵.

一些朋友喜欢使用JAVAScript过滤特殊字符,并限制许多字符的输入. 我不建议这样做. 首先,JAVAScript在客户端上运行并且不可靠. 您应该知道可以伪造对服务器的请求,并且伪造者不会添加您的JAVAScript代码. 其次是JAVAScript不是很友好. 第三,实际上没有必要限制太多字符,太多限制,用户会感到恐惧.

总结我对特殊字符的使用经验

1. 验证收到的数据类型;

2. 尝试通过存储过程来操作;

3. 如果上述方法不可行,请尝试使用AddNew方法编写该库;

4. 使用自定义函数SQLEncode()将单引号转换为查询条件的数据;

5. 表单控件的值必须用双引号引起来;

6. 在表单控件中显示数据时,请使用server.HTMLEncode()方法转换字符;

sql 不包含某个字符_sql 特殊字符 @_sql like 单个字符

7. 对于通过textarea提交的数据,请使用自定义字母HTMLEncode()转换字符并保留格式;

8. 尝试避免使用Request()接收数据,应使用Request.Form()或Request.QueryString();

9. 尝试避免通过URL传递字符参数(仅使用此方法传递数字参数)

*************************************************** *************

SQL查询中的特殊字符处理

我们都知道在SQL查询期间,单引号“'”是一个特殊字符,因此在查询期间必须将其转换为双单引号“”“.

但这只是特殊字符之一. 在实际的项目中,发现有类似操作的以下特殊字符: 下划线“ _”,百分号“%”,方括号“ []”和尖号“ ^”.

目的如下:

下划线: 用于替换任意字符(与正则表达式中的?等效)

百分号: 用于替换任意数量的任何字符(与正则表达式中的*等效)

方括号: 用于转义(实际上,只有左方括号用于转义,而右方括号则使用最接近优先级的原则来匹配最接近的左方括号)

斜杠: 用于排除某些字符以进行匹配(与正则表达式相同)

以下是一些匹配示例. 应该注意的是,只有特殊操作才具有这些特殊字符,而=操作则没有.

a_b ... a [_] b%

a%b ... a [%] b%

a [b ... a [[] b%

a] b ... a] b%

a [] b ... a [[]] b%

a [^] b ... a [[] [^]] b%

a [^^] b ... a [[] [^] [^]] b%

在实际处理中,对于=操作,通常只需要像这样替换它:

'->''

对于类似操作,需要进行以下替换(请注意顺序也很重要)

[-> [[](必须是第一个被替换!!)

sql 不包含某个字符_sql like 单个字符_sql 特殊字符 @

%-> [%](其中%是指要匹配的字符中包含的%,而不是专门用于匹配的通配符)

_-> [_]

^-> [^]

注意:

在Oracle9i中,经过实际测试后,需要处理的特殊字符为:

_(带下划线)

%(百分号)

‘(单引号)

&(Oracle中的此变量和以下字符组成一个变量)

上面的其他字符不需要处理.

对于前三种类型,您需要使用ESCAPE进行转义. 因为'&'符号很特殊,您需要将'xxx&xxx'转换为'xxx&'||'xxx'的形式,或使用chr(38)表示'&'

最好对转义字符使用“,”(反斜杠).

使用'@',全角字符太长会导致错误,原因目前未知.

sql的特殊字符:

1)单引号: 例如字符串a =“这是已婚的书. ”;

使用插入时发生错误.

已解决: a = a.Replace(“'”,“''”);

2)百分号%: 例如,字符串a =“ 50%”;

使用类似查询查找包含50%的所有记录,它将被视为通配符.

解决方案: 选择* FROM tbl,其中名称类似'%/ %%'ESCAPE'/'

那是a = a.Replace(“%”,“ // %%”)

或[%]

3)下划线_: 例如字符串a =“ m_n”;

使用类似查询的方式,请从tbl中选择*,其中名称如“%m_n%”sql 特殊字符 @,下划线被视为通配符.

已解决: [_]

4)方括号[]: 主要是左括号: [[]

5)尖括号^: [^]


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-275016-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...