Ash*_*lls 2 .net vb.net sql-injection request httprequest
我们继承了一个旧网站,其中包含近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
Run Code Online (Sandbox Code Playgroud)
这样称呼: -
Dim details As DataSet
detailsSQL = "select * from mytable where tableid = '" & myRequest(Request, "tableid") & "'"
details = sql.sqlSelect(detailsSQL)
Run Code Online (Sandbox Code Playgroud)
请注意,代码的结构和命名都是为了便于查找和替换.有了这个代码,虽然该网站继续经常受到损害.任何人都可以推荐添加主要的"干净"功能,以帮助阻止这些注射攻击吗?
我认为防止SQL注入的唯一可靠方法是将所有请求放入并转换为使用SQL参数.
但是,要回答您的问题,您的干净方法似乎缺少SQL注入的基本触发器 - 未转义的字符.目前,您的网站仍然容易受到各种类型的攻击,例如:
"password' or 1=1; --"
"password'; DROP Table Users; --"
Run Code Online (Sandbox Code Playgroud)
至少,确保你逃脱任何不良角色.但是请注意,这并不总是足够的,所以如果你想完全根除SQL注入我会重新迭代 - 使用SQL参数.
| 归档时间: |
|
| 查看次数: |
2225 次 |
| 最近记录: |