我们继承了一个旧网站,其中包含近 2000 个不同的手工构建的 SQL 字符串,直接从 httprequests 获取变量。该站点经常受到 SQL 注入攻击。显然,该站点应该使用 SQL 参数进行编码以避免这种安全噩梦,但由于涉及更改这些参数的工作量,我们正在寻找另一种“清理”传入请求的方法。
主要清洁功能:-
Public Function myRequest(ByRef Request As HttpRequest, ByVal param As String) As String
Return CleanRequest(Request(param))
End Function
Public Function CleanRequest(ByVal requestString As String) As String
Dim badChars() As String = {"select", "drop", ";", "--", "insert", "delete", "xp_", "update"}
Dim newChars As String = requestString
For i = 0 To UBound(badChars)
newChars = Replace(newChars, badChars(i), "", 1, -1, vbTextCompare)
Next
CleanRequest = Replace(newChars, "'", "''")
End Function
如此称呼:-
Dim details As DataSet
detailsSQL = "select * from mytable where tableid = '" & myRequest(Request, "tableid") & "'"
details = sql.sqlSelect(detailsSQL)
请注意,代码是结构化和命名的,以便于查找和替换。有了这个代码,尽管该网站继续经常受到攻击。任何人都可以推荐主要的“清洁”功能来帮助阻止这些注入攻击吗?