Что такое SQL-инъекция?

Один из самых больших классов веб-уязвимостей известен как «SQL-инъекция» или SQLi. Язык структурированных запросов, также известный как SQL, язык, используемый для взаимодействия с большинством баз данных, хотя используется ряд вариантов языка в зависимости от базы данных Платформа. Любой веб-сайт, на котором хранятся пользовательские данные, такие как информация об учетной записи, или предоставляющий функцию загрузки пользователей, например веб-сайт, на котором размещены изображения, будет использовать базу данных для хранения этих данных.

Совет: SQL обычно произносится как «ess cue ell» или «sequel», причем первый вариант более распространен в британском английском, а второй - в американском. Оба произношения обычно понимаются в контексте разговора о базах данных.

Что такое SQLi?

SQLi - это уязвимость, в которой веб-разработчики, разрабатывающие код, который обменивается данными между веб-сервер и база данных не обеспечивают защиты от команд SQL, отправляемых Пользователь. Проблема в том, что можно выйти из операторов базы данных и добавить новые аргументы или совершенно новый оператор. Измененный или второй оператор базы данных может выполнять ряд действий, включая потенциально крупномасштабные удаления или утечки данных.

Обычно эксплойты сводятся к тому, чтобы существующие операторы были истинными при любых обстоятельствах или предоставляли вторую пакетную команду, которая выполняет определенное действие, такое как удаление или отображение всех данных. Например, оператор SQL для входа на веб-сайт может проверять, совпадают ли отправленные имя пользователя и пароль с записью в базе данных. Чтобы попытаться получить доступ, эксплойт SQL-инъекции может попытаться добавить предложение «or true», такое как «or 1 = 1». Это приведет к тому, что команда будет выглядеть примерно так: «войти в систему с [этим] именем пользователя, если пароль [этот] или этот оператор верен».

Как предотвратить SQLi

SQLi был очень распространенным способом взлома базы данных веб-сайтов, а затем утечки в Интернете. Благодаря согласованным усилиям по обеспечению того, чтобы осведомленность о безопасности стала частью обучения разработчиков, этот класс уязвимостей в значительной степени был устранен и теперь редко встречается.

Правильный метод предотвращения SQLi - использовать подготовленные операторы, также известные как параметризованные запросы. Обычно операторы SQL объявляются, и пользовательский ввод объединяется с ними во время этого объявления. С подготовленными операторами команда базы данных записывается, а затем функция sperate запускает команду и вставляет данные пользователя. Хотя это может показаться незначительной разницей, но полностью меняет способ обработки команды. Разница предотвращает запуск каких-либо значимых команд SQL и рассматривает весь ввод данных пользователем как строку, предотвращая внедрение SQL-кода.