2016-04-11 3 views
0

Прежде чем я прошу - я знаю о paranterised запросов, но этот вопрос специально baout регулярные выражения, чтобы предотвратить SQL-инъекцииМожет ли регулярное выражение быть использовано для предотвращения SQL Injection

Допустим, у меня есть строки запроса с В параметре из q и у меня есть регулярное выражение ^201[0-9]Q[0-9]$, которое я выполняю против параметра, который передается в SQL.

Будет ли это достаточным в качестве защиты или может использоваться регулярное выражение? Некоторые псевдо-код:

if NOT validateToken(quarter) then 
    sql = "EXEC dbo.spTest '"&quarter&"'" 
end if 

Благодаря

+1

Зависит от того, как/где вы его проверяете и как вы вызываете базу данных после этого. –

+0

Я всегда проверяю данные, прежде чем использовать их для вставки. Затем, если все критерии выполнены, только затем передавайте данные в виде массива на мой уровень БД, какой цикл проходит по массиву, и избегайте его/дезинфекции перед вставкой. – vaso123

ответ

0

В вашем случае, да, чек достаточно для предотвращения SQL Injection. Вид проверки, которую вы устанавливаете, - это вид проверки, необходимый при работе с пользовательским вводом.

Итак, как правило, вы никогда не должны конкатенировать предоставленные пользователем данные и код SQL, если только вы не предоставляете всестороннюю проверку содержимого параметров.

ПОДОЖДИТЕ! Вы проверяете параметр в .Net или SQL? Если в .Net, вы в безопасности. Если небезопасный код добирается до SQL, вы ввернуты в рояль.

+0

Код на стороне сервера - не SQL – pee2pee