关于经典asp上的SQL注入捕获:在经典的asp – reposting表单上捕获SQL注入会产生大量的滴答声

SQL injection capturing on classic asp - reposting form puts in lots of ticks

我正在将SQL Server 2005与经典ASP一起使用,并在表单重新发布(我重新发布到同一页)上,替换每个文本字段,如下所示:

1
course = trim(replace(request("course"),"'","''"))\

问题是,如果在验证错误的情况下,我必须多次重新发布表单,那么我将用记号代替乘法。

在不进行这种替换的情况下,是否还有其他方法可以安全地检查字符串字段?


最好使用参数化查询:

1
2
3
4
5
6
7
8
9
10
11
dim cmd : set cmd = server.createObject("ADODB.Command")
dim param
dim sql : sql ="INSERT INTO table(course) VALUES (?)"
cmd.ActiveConnection = yourDBconnection
cmd.CommandType = adCmdText

set param = cmd.CreateParameter("course", adVarChar, , 20, request("course"))
cmd.Parameters.Append param

cmd.CommandText = sql
cmd.Execute

所以使用SQL注入是完全安全的


仅替换'以在SQL字符串中使用。(最好使用参数化查询..


最简单的方法是只在实际插入数据库时执行SQL转义:

1
course = trim(request("course"))

创建一个safesql函数:

1
2
3
function SafeSQL(TempStr)
    SafeSQL = Replace(TempStr,"'","''")
end function

然后,在插入时:

1
"INSERT INTO table(course) VALUES ('" & SafeSQL(course) &"')"

免责声明:我只知道ASP的工作知识,我不知道最佳实践。


你可以做到这一点

course=trim(替换(请求("course"),"",&;apos;"))