Это отбрасывает таблицу студентов.
исходный код в программе школы, вероятно, смотрит что-то как [1 119]
q = "INSERT INTO Students VALUES ('" + FNMName.Text + "', '" + LName.Text + "')";
, Это - наивный способ добавить ввод текста в запрос и очень плохо , как Вы будете видеть.
После значений от имени, текстовое поле второго имени FNMName. Текст (который является Robert'); DROP TABLE STUDENTS; --
), и текстовое поле фамилии LName. Текст (позволяют нам назвать его Derper
) связывается с остальной частью запроса, результат теперь на самом деле два запроса разделен разделитель оператора (точка с запятой). Второй запрос был , ввел в первое. Когда код выполнит этот запрос против базы данных, это будет похоже на это
INSERT INTO Students VALUES ('Robert'); DROP TABLE Students; --', 'Derper')
, который, без обиняков, примерно переводит в два запроса:
Добавляют, что новая запись на таблицу Students со значением Имени 'Robert'
и
Удаляет таблицу
Students, Все мимо второго запроса отмечено как комментарий : --', 'Derper')
'
на имя студента не комментарий, это - закрытие строковый разделитель . Так как имя студента является строкой, необходимо синтаксически завершить гипотетический запрос. Инжекция набрасывается только на работу , когда SQL-запрос они вводят результаты в допустимом SQL.
, Отредактированный снова согласно dan04 проницательный комментарий глоток> глоток>
Я уже нашел решение. В элементе управления reportviewer вы можете указать выполнение отчета в так называемой изолированной программной среде:
`rpv1.LocalReport.ExecuteReportInSandboxAppDomain();`
Это не предотвратит создание сборок Expression_Host, поскольку они необходимы для оценки выражений, которые вы использовали в своем отчете. Однако он запустит отчет в новом домене приложения. Этот новый домен приложения затем выгружается после завершения отчета, и в результате любая загруженная сборка в этом домене также выгружается.