Что такое ) and (107106380=107106380'

Выражение ) and (107106380=107106380' — это фрагмент SQL-кода, который часто используется в атаках типа SQL-инъекция. Оно представляет собой логическое условие, добавляемое к запросу для обхода аутентификации или извлечения данных. Число 107106380 — произвольное число, выбранное для создания всегда истинного условия.

В контексте информационной безопасности это классический пример «инъекции условия»: злоумышленник пытается внедрить в пользовательский ввод специальные символы, чтобы изменить логику SQL-запроса. Символы ), and, ( и ' играют ключевую роль.

Как работает это выражение

Предположим, на сайте есть форма входа, и сервер формирует запрос:

SELECT * FROM users WHERE username = '$user' AND password = '$pass';

Если злоумышленник введёт в поле пароля строку ) and (107106380=107106380', запрос может преобразоваться в:

SELECT * FROM users WHERE username = 'admin' AND password = '') and (107106380=107106380'';

Здесь часть 107106380=107106380 всегда истинна, поэтому условие AND становится неважным, и запрос может вернуть всех пользователей, включая администратора. Символ ) закрывает скобку, ( открывает новую, а ' разрывает строковый литерал.

Почему число 107106380?

Это просто случайное число, выбранное для создания пары «равно самому себе». Такое условие не зависит от данных в базе и всегда возвращает истину. Аналогично можно использовать 1=1 или 'a'='a'.

Отличия от других SQL-инъекций

Существуют разные типы инъекций: union-based, error-based, blind. Данное выражение относится к boolean-based blind SQL-инъекции, когда злоумышленник не видит直接 вывода, но может определить истинность условия по поведению приложения.

  • Union-based: использует UNION SELECT для объединения результатов.
  • Error-based: вызывает ошибки для получения информации.
  • Boolean-based: внедряет логические условия, как в нашем примере.

Особенность ) and (107106380=107106380' в том, что оно использует скобки для балансировки синтаксиса и кавычку для завершения строки. Это делает его универсальным для обхода простых фильтров.

Практическое значение и защита

Понимание таких конструкций необходимо разработчикам и специалистам по безопасности. Чтобы предотвратить SQL-инъекции, следует:

  1. Использовать параметризованные запросы (prepared statements).
  2. Применять хранимые процедуры.
  3. Экранировать специальные символы.
  4. Ограничивать права пользователя базы данных.
Согласно ISO 31-11 и ISO 80000-2, логические операторы, включая AND, имеют стандартные обозначения, но в SQL они записываются ключевыми словами.

Таким образом, ) and (107106380=107106380' — это не просто набор символов, а индикатор уязвимости. Его появление в логах или входных данных должно насторожить администратора.

Заключение

Выражение ) and (107106380=107106380' — типичный пример SQL-инъекции, использующей логическое условие для обхода аутентификации. Знание таких шаблонов помогает защитить веб-приложения. Всегда проверяйте пользовательский ввод и используйте современные методы защиты.

Источники