SQL-инъекция
SQL-инъекция (англ. SQL injection) — эксплуатация уязвимости веб-приложений, работающих с базой данных и не экранирующих должным образом пользовательский ввод, заключающаяся в передаче серверу баз данных через заполняемые пользователем текстовые поля произвольных команд SQL.
Как правило, инъекция начинается с ');
или ';
, завершающих строку и инструкцию SQL (INSERT
или UPDATE
/SELECT
соответственно), за которыми следуют впрыскиваемые команды.
Если пользовательский ввод может попасть и в имена столбцов таблиц или даже значения нетекстового типа, не заключённые в кавычки, появляются возможности и других SQL-инъекций, например, вложенных запросов.
Инъекция обычно заканчивается символом комментария --
, отсекающим остаток исходного запроса SQL, так что он не вызывает синтаксической ошибки.
Под пользовательским вводом следует понимать не только содержимое полей форм, но и весь код отдаваемых пользователю страниц на HTML и JavaScript.
В PHP, во избежание инъекций, все введённые пользователем строки, перед тем как формировать с их участием SQL-запросы, следует обрабатывать с помощью функций наподобие mysqli_real_escape_string ()
, экранируя и ограничители строк ('
и "
) и ограничители имён столбцов (`
) или направлять весь пользовательский ввод в параметры запроса.