首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清除请求以防止SQL注入攻击

问清除请求以防止SQL注入攻击
EN

Stack Overflow用户
提问于 2013-01-21 10:29:49
回答 2查看 3.3K关注 0票数 2

我们继承了一个旧网站,几乎有2000种不同的手工构建SQL字符串,直接从httprequest获取变量。该站点经常受到SQL注入攻击的危害。显然,这个站点应该使用SQL参数进行编码,以避免这种安全噩梦,但是由于工作负载的变化,我们正在寻找另一种“清理”传入请求的方法。

主要清洁功能:-

代码语言:javascript
复制
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

名称如下:-

代码语言:javascript
复制
Dim details As DataSet

detailsSQL = "select * from mytable where tableid = '" & myRequest(Request, "tableid") & "'"
details = sql.sqlSelect(detailsSQL)

请注意,代码的结构和名称都是为了便于查找和替换。在此代码到位的情况下,站点继续受到定期的破坏。是否有人推荐增加主要的“清洁”功能,以帮助阻止这些注入攻击?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-21 10:48:12

我认为防止SQL注入的唯一可靠方法是将艰苦的工作放入其中,并将所有请求转换为使用SQL参数。

但是,要回答您的问题,您的干净方法似乎缺少了SQL的基本触发器--未转义字符。目前,您的站点仍然容易受到各种类型的攻击,例如:

代码语言:javascript
复制
"password' or 1=1; --"
"password'; DROP Table Users; --"

至少,确保您正在转义任何bad characters。不过,请注意,这个isn't always enough,所以如果您想要彻底消除SQL使用SQL参数,我将再次迭代。

票数 5
EN

Stack Overflow用户

发布于 2013-01-21 10:56:22

下面的SQL是错误的。请使用SQL参数:它将帮助您摆脱最明显的SQL注入攻击。

代码语言:javascript
复制
detailsSQL = "select * from mytable where tableid = '" & myRequest(Request, "tableid") & "'"
details = sql.sqlSelect(detailsSQL)

将此替换为:

代码语言:javascript
复制
detailsSQL = "select * from mytable where tableid = @tableid"
details = sql.sqlSelect(detailsSQL, new SqlParameter(@tableid, myRequest(Request, "tableid")))

假设

  • sql是用于SQLServer数据库查询的包装器。
  • 您的sqlSelect函数也适合于具有SQL参数。
  • 按照James的建议,myRequest正确地转义条目

使用参数的正确方式将使解析SQL语句的每个条目不再必要。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14436680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档