Обнаружение общих шаблонов внедрения SQL в запросе - PullRequest
0 голосов
/ 02 февраля 2012

Я использую PHP-класс ezSQL для запросов MySQL.Поскольку все мои запросы проходят через функцию $ezsql->query(), я подумал, что было бы неплохо реализовать метод, блокирующий общие методы SQL-инъекции из $ezsql->query().

Например, наиболее распространенным являетсявероятно 1=1.Таким образом, это регулярное выражение должно быть в состоянии блокировать все варианты этого:

preg_match('/(?:"|\')?(\d)(?:"|\')?=(?:"|\')?\1(?:"|\')?/',$query);

Это будет блокировать "1"="1", '1'=1, 1=1, и т. Д.идея?Если да, то каковы некоторые другие общие закономерности?

Редактировать: Забыл упомянуть, я использую проверки и санитарии.Это просто дополнительная мера предосторожности.

Ответы [ 2 ]

3 голосов
/ 02 февраля 2012

Это хорошая идея?

Нет.По двум причинам:

  1. Вы делаете это неправильно (да, вы просто потерпели неудачу с вашим голым подходом к черному списку SQL).И нет, я не скажу вам, как вы могли бы улучшить это из-за 2:
  2. Это черный список.Вы не должны использовать черный список в самом классе базы данных.Это не добавленная предварительная осторожность, это просто бесполезно.Черный список может быть добавлен дополнительно на уровне запроса веб-сервера, например.

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

2 голосов
/ 02 февраля 2012

Это хорошая идея?

Определенно НЕТ.

Каждый раз Я вижу такое предложение на интернет-форуме, мне интересно, что, если программное обеспечение, на котором работает этот форум, следует такомушаблон?Плохой изобретатель просто не сможет придумать свое решение, потому что программное обеспечение заблокирует почту!

Дополнительные меры предосторожности не повредят.Лучше быть в безопасности, чем потом сожалеть.

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

Кроме того, я верю, что только знание может обезопасить вас.
Не случайные отклонения от некоторых смутных идей, а разумные и разумные действия.

Пока вы экранируете и цитируете данные, которые отправляются в запрос, и до тех пор, пока вы устанавливаете правильную кодировку для функции выхода, нет причин для печали.
Пока вы используете подготовленные операторы для добавления ваших данных в запрос, нет причин для печали.
Пока вы фильтруете идентификаторы SQL и ключевые слова на основе жестко закодированного белого списка, нет причин для печали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...