Большинство сайтов в настоящее время используют параметризованный SQL - не встроенный SQL. Ситуация будет иметь место выше, если, например, там был разобран, встроенный SQL, похожее на следующее:
непараметризированным Псевдо
string sql = "SELECT * FROM table_name WHERE smth='" + UserInput + "'";
ExecuteSql(sql);
... где UserInput определяет элемент на веб-сайте.
Вместо добавления действительных данных в поле UserInput, вы добавляете,
UserInput = '';DROP table_name;
... вы на самом деле добавлять новую логику в конце запроса, в результате злонамеренного использования системы.
Параметрированные утверждения исключают возможность SQL-инъекции, поскольку вы не можете изменить структуру запроса, вставив логику в подпись.
Если вы попытались установить поле UserInput в неправильный запрос, но на сайте были использованы параметры в инструкции, вам не повезло.
Параметризованные Псевдо:
Adapter proc;
proc.StoredProcedure = "GetUserNames"
proc.AddParameter("@USER",UserInput);
proc.Execute();
... а @USER теперь равен буквальный "'\; DROP table_name;", которым SQL будет относиться как обычный ола' параметр.
Ваш вопрос не совсем ясен. Вы пытаетесь получить помощь по использованию SQL-инъекции на веб-странице? – Younes
Что вы спрашиваете? – SLaks
Не знаю, каков был исходный запрос, как будет работать инъекция. Посмотрите мой ответ здесь http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain/332367#332367, который, по мнению некоторых людей, является хорошим объяснением того, как это работает. Что касается вашей конкретной статьи, не могу ответить, почему она «не работает». – Will