Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Инъекции SQL

Инъекции SQL

Инъекции SQL — это технология, которая использует одну из уязвимостей в приложениях базы данных, динамически создающих инструкции SQL. Основной принцип, заложенный в этих инъекциях, — изменение соответствующей инструкции путем подстановки более широкого критерия в предложение where или дополнение инструкции командами SQL. К примеру, если клиентское приложение проверяет наличие конкретного идентификатора клиента с помощью инструкции Так как пользователя с идентификатором somebody не существует, в аутентификации будет отказано. Однако во второй части запроса сравниваются две идентичные строки, которые в любом случае дадут результат true, так что результатом оператора or будет true. Следовательно, любой пользователь всегда будет аутентифицирован. В предыдущем примере взломщик принудил сервер выполнить составную инструкцию, которую можно представить как При выполнении данная инструкция удаляет все записи из таблицы customer (разумеется, для этого требуется знание структуры базы данных и четкое понимание технологий взлома).

От атак методом инъекций SQL можно защититься на разных уровнях. На первой линии обороны стоит назначение минимального набора разрешений. В приведенном выше примере запрет операций удаления в таблице customer не позволил бы выполниться внедренному вредоносному коду. Однако данное ограничение было бы бесполезным в случае первого сценария, предполагающего внедрение тривиального условия в предложение where. Для гарантии того, что СУБД будет выполнять только разрешенные операции, нужно реализовать логику проверки на уровне приложения или ограничить пользователя применением исключительно хранимых процедур (с реализацией проверки в теле хранимой процедуры). К тому же СУБД может осуществлять быстрый синтаксический разбор для определения неприемлемых булевых выражений.

Того же результата можно достичь и с помощью триггеров. Триггер — это программный код, выполняемый автоматически в ответ на соответствующее ему событие. В предыдущем примере событием является операция вставки строки (INSERT) в таблицу CUSTOMER. В базе можно создать триггер, выполняемый при каждой попытке приложения или пользователя вставить, обновить или удалить данные из таблицы.