Я разработчик настольных систем, пишу для внутренних пользователей, поэтому я не беспокоюсь о злонамеренных хакерах, но я хотел бы знать, есть ли что-нибудь, что они могли бы ввести при обновлении значения, которое будет выполнять sql на сервере.
Бизнес определяет свою схему контента, и у меня есть для них приложение CRUD, которое не нужно менять при изменении их схемы, поскольку детали проверки основаны на таблицах, а обновления - с помощью динамического SQL.Я должен поддерживать одинарные кавычки в их вводе данных, поэтому, когда они вводятся, я удваиваю их перед выполнением SQL на сервере.Из того, что я прочитал, однако, этого не должно быть достаточно, чтобы остановить инъекцию.
Поэтому мой вопрос заключается в том, какой текст они могли бы ввести в текстовое поле произвольной формы, которое могло бы что-то изменить на сервере.вместо того, чтобы быть сохраненным как литеральное значение?
По сути, я строю инструкцию SQL во время выполнения, которая следует шаблону:
обновить поле набора таблиц = значение, где pkField = pkVal
с этим кодом VB.NET:
Friend Function updateVal(ByVal newVal As String) As Integer
Dim params As Collection
Dim SQL As String
Dim ret As Integer
SQL = _updateSQL(newVal)
params = New Collection
params.Add(SQLClientAccess.instance.sqlParam("@SQL", DbType.String, 0, SQL))
Try
ret = SQLClientAccess.instance.execSP("usp_execSQL", params)
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
Return ret
End Function
Private Function _updateSQL(ByVal newVal As String) As String
Dim SQL As String
Dim useDelimiter As Boolean = (_formatType = DisplaySet.formatTypes.text)
Dim position As Integer = InStr(newVal, "'")
Do Until position = 0
newVal = Left(newVal, position) + Mid(newVal, position) ' double embedded single quotes '
position = InStr(position + 2, newVal, "'")
Loop
If _formatType = DisplaySet.formatTypes.memo Then
SQL = "declare @ptrval binary(16)"
SQL = SQL & " select @ptrval = textptr(" & _fieldName & ")"
SQL = SQL & " from " & _updateTableName & _PKWhereClauses
SQL = SQL & " updatetext " & _updateTableName & "." & _fieldName & " @ptrval 0 null '" & newVal & "'"
Else
SQL = "Update " & _updateTableName & " set " & _fieldName & " = "
If useDelimiter Then
SQL = SQL & "'"
End If
SQL = SQL & newVal
If useDelimiter Then
SQL = SQL & "'"
End If
SQL = SQL & _PKWhereClauses
End If
Return SQL
End Function
при обновлении текстового поля до значения
Redmond ';удалить таблицу OrdersTable -
, которая генерирует:
Update caseFile set notes = 'Redmond''; drop table OrdersTable--' where guardianshipID = '001168-3'
и обновляет значение до введенного ими буквального значения.
Что еще они могли бы ввести,впрыскивать SQL?
Опять же, я не беспокоюсь, что кто-то хочет взломать сервер на своей работе, но хотел бы знать, как, если бы они могли случайно вставить текст откуда-то еще и что-то сломать.
Спасибо.