SQL注入的原理:利用提交的字段构造特殊的SQL语句,猜解数据库的表结构、数据库帐号、密码,进而破坏数据、控制服务器。
流行防注入方案:研究每一个具体的注入技术,浏览器端提交数据后查询数据库前,检测提交数据是否含有具体注入技术包含的符号、单词。
缺点:由于SQL注入是设计缺陷,要避免注入,必须熟悉所有的特殊的SQL语句。这要化大量的时间去精通SQL不常用的语句。
另外,检测数据的时候,需要过滤的符号、单词、语句结构很多,计算量很大。
具体措施:
1 对输入的数字,使用i=Cstr(Cint(Request("i")))双层转换,如果转换失败,说明输入的不是数字。
2 对输入的中文字符串、中文段落,使用如下函数。把此函数放到include文件夹下的function.asp文件内,包含到需要此函数的asp页面。
<script language="vbscript" runat="server">
Function asc2chinese(str1)
Dim str2,c,L,i
str2=""
L=Len(str1)
For i =1 To L
c=Mid(str1,i,1)
If Asc(c)>0 And Asc(c)<127 Then
str2=str2+Chr(Asc(c)-23680) '字符编码大于0,小于127为ANSI编码,特定ANSI编码减去23680等于对应的中文宽体编码的值。真实情况是中文宽体使用的是多字节存储,被IIS认为是一个很大的负数。
Else
str2=str2+c
End if
Next
asc2chinese=str2
End Function
</script>
3 对输入的英文字符串,比如帐号、密码,添加帐号、密码时,限定长度、禁止空格、符号。查询帐号、密码时检查长度、空格、符号。