Проверка работоспособности - объединение значений даты - SQL-инъекция - PullRequest
0 голосов
/ 12 апреля 2010

В настоящее время мы получаем параметры значений как VARCHAR, а затем строим из них дату. Я хочу подтвердить, что приведенный ниже метод остановит возможность внедрения SQL из этого оператора:

select CONVERT(datetime, '2010' + '-' + '02' + '-' + '21' + ' ' + '15:11:38.990')

Еще одно замечание: фактические параметры, передаваемые в сохраненный процесс, имеют длину, ограниченную (4, 2, 2, 10, 12) VARCHAR в соответствии с вышеприведенным.

Ответы [ 2 ]

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

, если вы поместите использование такого выражения в хранимую процедуру:

select CONVERT(datetime, @Year + '-' + @Month + '-' + @Day+ ' ' + @Time)

, тогда все будет в порядке, так как целевой тип данных datetime будет получать только допустимые строки даты.

если вы используете это в своей хранимой процедуре:

EXEC ('select CONVERT(datetime, @Year+''-''+@Month+''-''+@Day+'' ''+ @Time)')

У вас может быть проблема, маловероятно, поскольку входные строки ограничены короткой длиной, но кто знает, что придумает какой-нибудь хакер, чтобы поместиться в этом крошечном пространстве.

0 голосов
/ 12 апреля 2010

если этот оператор является хранимой процедурой, вы все равно не будете подвергаться внедрению sql

если этот оператор генерируется на языке - например, php - тогда просто убедитесь, что вы избегаете строк на входе (замените 'на \' для mysql или '' для mssql), чтобы избежать атак с использованием инъекций.

...