Предотвращение 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

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

  1. Принять только действительный SQL
  2. Отклонить неверный SQL

Оба сложны. Я предполагаю, что #1 безопаснее, потому что вы отклоняете все, кроме допустимого SQL, но будет довольно сложно предотвратить неверный SQL в допустимом SQL, не ограничивая слишком много возможностей.

В конце концов вы обнаружите, что использование параметров намного безопаснее, поскольку, пока вы не выполняете переданные строки, опасность внедрения SQL-кода отсутствует.

Другие вопросы по тегам