一段ASP代码 你看下什么意思 。。。。。。

来源:百度知道 编辑:UC知道 时间:2024/09/20 03:00:23
一个很简单的ASP。我做到了安全方面。 说有个防止SQL注入的
在下的一个程序中conn.asp 文件中已经有了 防止SQL功能。

<%
'---------- 防止SQL注入 -----------
dim SQL_Injdata
SQL_Injdata = "'|;|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|")

If Request.QueryString<>"" Then
For Each SQL_Get In Request.QueryString
For SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_Data))>0 Then
Response.end
end if
next
Next
End If
'---------- 连接数据库 ----------
Dim conn,connstr
Set conn=Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;User ID=admin;Password=;Data Source="&Server.MapPath("../DataBase123/#shit.asp")&";"
conn.open connstr
%>
我知道下段是连接数据库。 但是上段的 具体是什么意思。。。。。。。(最好解释每一行)

'---------- 防止SQL注入 -----------
dim SQL_Injdata '定义变量,下一行则赋值要检查的字符串列表,竖线的作用是分割开,下边要用到竖线
SQL_Injdata = "'|;|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
'吧字符串列表分割开成单个,用于逐个检查 并保存到数组内 方便遍历读取调用
SQL_inj = split(SQL_Injdata,"|")

If Request.QueryString<>"" Then '参数不为空时才开始检查
For Each SQL_Get In Request.QueryString '遍历参数
For SQL_Data=0 To Ubound(SQL_inj) '内层循环,遍历上边的字符串数组
if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_Data))>0 Then '检查是否存在 instr函数查询字符串,如果包含则返回出现的位置
Response.end '包含不允许出现的字符时,终止程序
end if
next '继续检查下一个敏感字符是否存在
Next '继续检查下一个参数
End If

这样的也有个弊端,一个对一些正常的字符可能判断失误,第二只检查了get方式的参数,对post来的不起作用

上面那段是用来防SQL注入的

'定义 敏感关键字列表
dim SQL_Injdata
SQL_Injdata = "'|;|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare&q