13.6.5. SQL Injection

Внедрение SQL-кода (англ. SQL injection) — один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода.

Внедрение SQL, в зависимости от типа используемой СУБД и условий внедрения, может дать возможность атакующему выполнить произвольный запрос к базе данных (например, прочитать содержимое любых таблиц, удалить, изменить или добавить данные), получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере.

Атака типа внедрения SQL может быть возможна из-за некорректной обработки входных данных, используемых в SQL-запросах.

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

Очень эффективным методом защиты от SQL-инъекций является использование переменных связывания. Oracle Application Express поддерживает использование переменных связывания во всех SQL и PL / SQL.

Переменная связывания – это метка-заполнитель (placeholder) в запросе. Например, для извлечения записи о сотруднике с табельным номером 123 можно выполнить запрос:

select * from emp where empno = 123;

Альтернативно можно выполнить запрос:

select * from emp where empno = :empno;

В типичной системе запись о сотруднике с номером 123, может быть, будет извлекаться только один раз и никогда больше. Позднее вы, возможно, будете извлекать записи о сотрудниках с номерами 456, 789 и т.д. Если в запросе вы используете литералы (константы), каждый запрос будет совершенно новым запросом, который до этого никогда не обрабатывался в СУБД. Он должен быть разобран, квалифицирован (должны быть разрешены имена), проверен на наличие у пользователя соответствующих прав доступа, оптимизирован и т.д. Короче говоря, каждый уникальный оператор, выполняемый вами, должен компилироваться при каждом выполнении.

Во втором запросе используется переменная связывания :empno, значение которой подставляется во время выполнения запроса. Такой запрос один раз компилируется и план его выполнения сохраняется в разделяемом пуле (в библиотечном кеше), из которого он может быть извлечен и повторно использован. Различие между этими двумя запросами огромное.

13.6.5.1. Защита состояния сеанса

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