Вот как это работает:
Предположим, что администратор ищет записи студента
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; --
Двойная черта (-) просто закомментирует оставшуюся часть запроса.
Это опасно, так как может аннулировать аутентификацию по паролю, если она присутствует
Первый будет выполнять обычный поиск.
Второй исключит ученика из таблицы, если учетная запись имеет достаточные привилегии (как правило, учетная запись администратора школы будет выполнять такой запрос и иметь привилегии, о которых говорилось выше).