Фон
У меня был контракт на анализ существующего поставщика данных, и я знаю, что следующий код неисправен; но для того, чтобы указать, насколько это плохо, мне нужно доказать, что он восприимчив к 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