Защита от SQL-инъекций очень похожа на фильтрацию почтового спама. Очень похожи и задачи, которые решают разработчики этих систем. Давайте взглянем, какими методами фильтруют спам на почтовых серверах.

  • Анализ текста сообщений с помощью различных алгоритмов (Байесовская фильтрация спама и прочее)
  • Контентная фильтрация. Включает в себя поиск в тексте признаков спама (ссылки, предложение товара, ключевые слова)
  • На основе статистической информация о том, как другие пользователи почтового сервера отреагировали на подобное сообщение (отметили ли его как «СПАМ»)
  • Получая информацию от внешних сервисов о степени доверия к тому или иному серверу-отправителю.

Каждый из этих тестов разбивается на подтесты, каждому из которых присваивается некоторый «вес» в баллах. Если сообщение успешно проходит подтест, его баллы добавляются к общему баллу теста. Тесту может присваивать как положительное значение баллов, так и отрицательное. Сообщение проходит все тесты и подсчитывается общий балл. Чем выше балл, тем выше вероятность, что сообщение является спамом.

Например, в спам-фильтре SpamAssassin предусмотрен настраиваемое пороговое значение баллов, при превышении которого письмо классифицируется как спам. Обычно порог таков, что для присвоения категории спама письмо должно соответствовать нескольким критериям — срабатывания только одного теста недостаточно для превышения порога. Принципы работы других спам-фильтров в целом аналогичны.

Поскольку ни один из методов фильтрации спама сам по себе не гарантирует как полной защиты от нежелательных сообщений, так и от ложных срабатываний, на практике обычно применяется комбинация нескольких методов. Так, при настройке общего порога и количества баллов, присваиваемых конкретным тестом, регулируется степень «подозрительности» фильтра при обработке того или иного типа сообщений.

Принципы фильтрации SQL-инъекций аналогичны. При фильтрации на уровне DAF чаще всего можно видеть синтаксически верный SQL. Поэтому необходимо по косвенным признакам определить вероятность того, что запрос может быть зловредным. При этом DataArmor Database Firewall может использовать следующую информацию:

  • Частота поступления некорректных SQL-запросов с этого хоста или от этого клиента
  • Имеются ли в запросе константные условия, постоянно возвращающие TRUE или FALSE
  • Имеются ли в тексте запроса комментарии и содержат ли эти комментарии части SQL запроса
  • Наличие OR, UNION блоков
  • Другие условия

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

Напоследок стоит сказать, что полную защиту от SQL-инъекций даёт только качественный и хорошо протестированный код сервера приложений.

Комментарии