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转义:
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;"))