Как работает SQL-инъекция из комикса XKCD «Таблицы Бобби»? - PullRequest
1051 голосов
/ 02 декабря 2008

Просто глядя на:

XKCD Strip (Источник: https://xkcd.com/327/)

Что делает этот SQL:

Robert'); DROP TABLE STUDENTS; --

Я знаю, что и ', и -- предназначены для комментариев, но разве слово DROP также не комментируется, поскольку оно является частью одной строки?

Ответы [ 12 ]

15 голосов
/ 02 декабря 2008

Символ ' в SQL используется для строковых констант. В этом случае он используется для окончания строковой константы, а не для комментария.

6 голосов
/ 02 декабря 2013

Вот как это работает: Предположим, что администратор ищет записи студента

Robert'); DROP TABLE STUDENTS; --

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

Код для получения имени пользователя из запроса:

Теперь запрос будет выглядеть примерно так (для поиска в таблице учеников)

String query="Select * from student where username='"+student_name+"'";

statement.executeQuery(query); //Rest of the code follows

Результирующий запрос становится

Select * from student where username='Robert'); DROP TABLE STUDENTS; --

Поскольку пользовательский ввод не очищен, приведенный выше запрос состоит из 2 частей

Select * from student where username='Robert'); 

DROP TABLE STUDENTS; --

Двойная черта (-) просто закомментирует оставшуюся часть запроса.

Это опасно, так как может аннулировать аутентификацию по паролю, если она присутствует

Первый будет выполнять обычный поиск.

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

...