Об SQL-инъекциях

Обычно про SQL инъекции рассказывают на примере оператора SELECT, что недостаточно очевидно показывает опасность инъекции. Разберем случаи, когда на сайте реализовано api, позволяющее асинхронно выполнять удаление или обновление данных. Рассмотрим запрос к сайту вида somesite.ru/delprofile.php?user=alice Запрос удаляет профиль пользователя alice с сайта При обращении к базе данных будет выполнен запрос вида DELETE FROM users WHERE username='alice' Если вместо alice ввести в адресной строке выражение alice’ OR 1=1;-- то в результате подстановки получится SQL выражение DELETE FROM users WHERE username='alice' OR 1=1;--' ; является разделителем команд к базе данных, а - - позволяет оставлять комментарии поскольку 1=1 всегда верно то и условие c оператором ИЛИ для каждой строки будет верно. Это означает, что про построчном сравнении будут удалены ВСЕ строки в базе данных.   Другой пример — внесение в базу данных изменений от лица другого пользователя Рассмотрим URL адрес вида site.ru/update_password.php?username=alice&new_pass=12345 В обработчике запроса может быть выполнен SQL запрос вида UPDATE users SET password='12345' WHERE username='alice' Предположим, что злоумышленник модифицирует адресную строку site.ru/update_password.php?new_pass=12345&username=alice’ OR 1=1;-- В этом случае логика запроса меняется UPDATE users SET password='12345' WHERE username='alice' OR 1=1;--» и пароли будут сменены для всех пользователей сайта и злоумышленник сможет получить доступ к аккаунта обычных или привелигированных пользователей.

Теги документа