Предотвращение SQL-инъекций с использованием регулярных выражений
Я знаю, что так неправильно защищать SQL-инъекцию таким образом (регулярное выражение), и я должен использовать параметризованные запросы, но на этот раз у меня особая ситуация. Я пишу программу генератора форм, и мне нужно написать сложный пользовательский элемент управления поиском, так что на этот раз у меня нет другого пути (я думаю)!
В любом случае я ищу регулярное выражение для проверки входных строк (на стороне сервера), есть ли какая-либо атака, как запросы на него или нет.
2 ответа
Я бы также сказал, чтобы сделать это правильно, используя параметризованную хранимую процедуру. Основная идея заключается в том, что вы устанавливаете все параметры в null, а затем пропускаете только те, по которым хотите искать. Ваше предложение WHERE выглядит следующим образом
WHERE (MyColumn1=@Param1 OR @Pram1 IS NULL)
AND (MyColumn2=@Param2 OR @Pram2 IS NULL)
Вот еще несколько деталей
http://weblogs.asp.net/rmclaws/archive/2004/02/18/75381.aspx
Это очень сложно, потому что регулярное выражение может использовать два подхода:
- Принять только действительный SQL
- Отклонить неверный SQL
Оба сложны. Я предполагаю, что #1 безопаснее, потому что вы отклоняете все, кроме допустимого SQL, но будет довольно сложно предотвратить неверный SQL в допустимом SQL, не ограничивая слишком много возможностей.
В конце концов вы обнаружите, что использование параметров намного безопаснее, поскольку, пока вы не выполняете переданные строки, опасность внедрения SQL-кода отсутствует.