Инъекция может произойти, если оператор SQL выполняется неправильно.
Например, давайте представим, что ваша таблица комментариев имеет два поля: целочисленный идентификатор и строку комментария. Итак, вы бы INSERT
сделали следующее:
INSERT INTO COMMENTS VALUES(122,'I like this website');
Представьте, что кто-то вводит следующий комментарий:
'); DELETE FROM users; --
Если вы просто поместите строку комментария в SQL без какой-либо обработки, это может превратить ваш INSERT
в следующие два оператора, за которыми следует комментарий:
INSERT INTO COMMENTS VALUES(123,''); DELETE FROM users; -- ');
Это удалит все из вашей таблицы users
. И есть люди, готовые потратить весь день, чтобы найти правильное имя таблицы, чтобы очистить, используя метод проб и ошибок и различные уловки. Вот описание того, как можно выполнить атаку SQL-инъекцией.
Для предотвращения этого вам необходимо использовать параметризованные операторы SQL .
И это не только по соображениям безопасности. Например, если вы создаете свои операторы SQL наивно следующий комментарий:
I'm just loving this website
вызовет синтаксическую ошибку SQL из-за того, что апостроф интерпретируется SQL как закрывающая кавычка.