Что такое SQL Injection

· 2 мин

В бизнес-кругах SQL ассоциируется с аналитикой данных, но это далеко не единственная его функция. Изначально SQL был создан как язык запросов к структурированным базам данных и используется на бэкенде многих приложений для сохранения, обновления, удаления и выборки данных. Другими словами, SQL везде, но хорошо спрятан от глаз пользователей. Самая популярная система управления сайтами WordPress (40% всех сайтов в мире) делает несколько SQL запросов к базе данных каждый раз, когда пользователь заходит на сайт.

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

Как это работает?

Встречаются сайты, которые при ошибке выводят в браузер больше информации чем нужно, выдавая тем самым своё внутреннее устройство. (Говно)кодеры могут вывести на экран целиком запрос SQL, чтобы было легче отлавливать баги. Это раздолье для хакеров.

Некоторые сайты берут данные для формирования SQL запроса из адреса, введённого в браузер. Например, они могут искать в базе продукт с кодом 597 (“where item=597” на SQL), если адрес выглядит как example.com/shop?item=597.

Хакер может заменить 597 на “597;drop table items;” и, если код использует данные из адреса в том виде, в котором они были введены и у кода есть разрешение на удаление таблиц, то запрос может удалить таблицу items и завалить весь сайт.

Посмотрим поближе. После 597 хакер вставил точку с запятой, что сигнализирует окончание одного запроса и начало другого. А другой запрос говорит базе данных удалить таблицу, где хранятся данные (drop table).

SQL Injection можно легко предотвратить, так же как можно предотвратить и многие другие атаки, но для этого нужно знать, что такое в принципе возможно и всегда думать наперёд о безопасности.

Начать изучать тему безопасности можно по списку OWASP Top Ten, детально описывающий самые распространённые методы атак на веб-приложения.