【发布时间】:2010-12-20 11:27:54
【问题描述】:
背景
我已签约分析现有的数据提供者,我知道以下代码有问题;但是为了指出它有多糟糕,我需要证明它容易受到 SQL 注入的影响。
问题
什么“Key”参数可以破坏PrepareString 函数并允许我执行DROP 语句?
代码片段
Public Shared Function GetRecord(ByVal Key As String) As Record
Dim Sql As New StringBuilder()
With Sql
.Append("SELECT * FROM TableName")
If String.IsNullOrEmpty(Agency) Then
.Append(" ORDER BY DateAdded")
Else
.Append(" WHERE Key = '")
.Append(PrepareString(Key))
.Append("'")
End If
End With
Return ExecuteQuery(Sql.ToString())
End Function
Public Shared Function PrepareString(ByVal Value As String) As String
Return Value.Replace("''", "'") _
.Replace("'", "''") _
.Replace("`", "''") _
.Replace("´", "''") _
.Replace("--", "")
End Function
【问题讨论】:
-
如果您使用的是 VB,为什么还要努力考虑所有可能的攻击向量,而不是仅仅使用参数化查询?
-
没有必要粗鲁。漏洞黑名单是一场艰苦的战斗,必将失败。依赖参数化查询。期间。
-
我同意 Yann 的意见,尤其是你的粗鲁表明你没有以专业的方式行事,因为这里有些人(引用你的话并不密集)致力于是时候回答包括你在内的其他人的问题了!多一点体贴和尊重。
-
乔希,不要粗鲁;你应该听听这里的每一个人。具有讽刺意味的是,您的个人资料说:“您可以做到这一切。”如果您对自己的能力如此自信,为什么要在这里寻求帮助?
-
不要说得太细,但你问错了问题。您严厉地向社区发表讲话,并获得了反对票作为回报。我已经编辑了你的问题以解决问题的意图,所以它可能会被赞成,因为它可能是一个好问题。
标签: .net sql sql-server vb.net sql-injection