Параметры в функции FormsOf и SQL-инъекции - PullRequest
1 голос
/ 01 февраля 2010

Может ли следующий SQL быть подверженным внедрению SQL через параметр @SearchWord?

Я хочу использовать параметры с функцией FormsOf, но единственное руководство для этого я нашел в этом вопросе переполнения стека: Как передать параметр в функцию FormsOf на сервере sql

Однако решение, похоже, заключается в том, чтобы использовать немного динамического SQL, и мне было интересно, будет ли это восприимчивым к SQL-инъекции. Что произойдет в следующем примере, если @searchWord содержит строку типа SQL-инъекции? Разве это не проблема, потому что он все еще находится внутри параметра, переданного в качестве аргумента FREETEXTTABLE?

Решение дано:

DECLARE @SearchWord nvarchar(max)
SET @SearchWord = 'tax'

DECLARE @SearchString nvarchar(max)
SET @SearchString = 'FormsOf(INFLECTIONAL, "' + @SearchWord + '")'

SELECT listing_id, RANK, name, address, city, zip, heading, phone 
FROM listings a, 
FREETEXTTABLE(listings, *, @SearchString)
WHERE [KEY] = a.listing_id
ORDER BY RANK DESC, name

Ответы [ 2 ]

2 голосов
/ 07 апреля 2010

Нет, это не восприимчиво. Здесь нет динамического SQL (для этого потребуется использовать EXEC или sp_executesql), поэтому нет вектора для внедрения SQL.

Для того чтобы существовала уязвимость внедрения SQL, введенная пользователем строка (в данном случае @SearchWord) должна быть вставлена ​​непосредственно в текст инструкции SQL. Здесь он используется только для создания другой строковой переменной, которая впоследствии используется в качестве параметра для другого оператора SQL.

Этот оператор может , однако, fail , если пользователь вводит «недопустимое» слово для поиска, то есть слово, содержащее одинарные кавычки, поэтому вам, вероятно, все равно следует избегать любого значения, переданного @SearchWord. Но его нельзя использовать для выполнения произвольного SQL.

1 голос
/ 07 апреля 2010

Я не проверял это, но я не думаю, что интерпретатор просто вставляет значение @SearchString в утверждение. Он должен анализировать @SearchString с использованием правил, которые ожидает FREETEXTTABLE - так работают другие параметры.

...