2013-09-19 4 views
2

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

В настоящее время мой регулярное выражение поддерживает только прописные & мне было интересно, будет ли это возможно иметь также принимаем без шапки, как-а также другие комбинации букв, например SElEcT

Я понимаю, ввод вручную будет возможно, однако, это не самый эффективный способ выполнить такую ​​задачу.

Это мой текущий код:

function checkString($string) 
{ 
if(preg_match('[SELECT|FROM|DATABASE|TABLE|DROP|ALTER|LIKE|IN|BETWEEN|UNION|NULL|CHECK|JOIN|AVG|SUM|COUNT|FIRST|LAST|MAX|MIN|GROUP]', $string 

Спасибо.

+1

Добавить в 'i' флаг вашего регулярного выражения. Вы имели в виду использовать '[' как разделитель? – elclanrs

+2

Если вы намерены использовать это как механизм предотвращения атак SQL-инъекций, вам может потребоваться полностью рассмотреть другой подход. Это неправильный путь. –

+0

Не предотвращать атаки, а скорее предупреждать пользователя о том, кто пытается атаковать, он будет проходить через сообщения Post и Get. Затем я буду фильтровать, но это отправит им электронное письмо, позволяющее им знать, только небольшой проект, над которым я работаю :) –

ответ

6

Используйте i модификатор (делает случай регулярных выражений нечувствительным.):

if(preg_match('/(SELECT|FROM|DATABASE|TABLE|DROP|ALTER|LIKE|IN|BETWEEN|UNION|NULL|CHECK|JOIN|AVG|SUM|COUNT|FIRST|LAST|MAX|MIN|GROUP)/i', $string 

More info

+0

Объясните, что делает модификатор 'i' [is | does], и я его повышу. –

+2

Нечувствительность к регистру – TheNytangel

Смежные вопросы