背景
我被承包分析一个现有的数据提供者,我知道下面的代码存在问题;但是为了指出它有多糟糕,我需要证明它容易受到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