Как исправить код состояния сервера: 302 Найдено с помощью SQL Inject Me Firefox Addon

Я отсканировал свой скрипт входа в систему, используяSQL Inject Me Firefox addon

Согласно результатам теста, мой скрипт был уязвим для SQL-инъекций. Результат на примере

Results:
Server Status Code: 302 Found
Tested value: 1' OR '1'='1
Server Status Code: 302 Found
Tested value: 1' OR '1'='1
Server Status Code: 302 Found
Tested value: 1 UNI/**/ON SELECT ALL FROM WHERE
Server Status Code: 302 Found
Tested value: %31%27%20%4F%52%20%27%31%27%3D%27%31

Мой сценарий

login.php - Форма входа

check-login.php - чтобы проверить детали входа и вот код.

$ email = clean ($ _ POST ['username']); $ pass = clean ($ _ POST ['password']); $ user = "select * from tbl_admin, где admin = '$ email' и pass = '$ pass'";

// некоторый код

$ _SESSION ['login_mes'] = "Вы успешно вошли в систему!"; заголовок ( "Location: admin.php"); Выход();

} еще {

$ _SESSION ['login_mes'] = "Неверный адрес электронной почты или пароль, повторите попытку."; заголовок ( "Location: login.php"); Выход(); }

Проблемы возникли, когда не удалось войти. Если я удалю

} else {

$_SESSION['login_mes'] = "Invalid email address or password, please try again.";
header("Location:login.php");
exit();
}

SQL Inject Me не обнаруживает сбоев и как исправить эту часть?

 Andy Gaskell16 авг. 2009 г., 08:31
Вид побочного вопроса - есть ли концепция параметризованных запросов в PHP? Это может быть стоит посмотреть.
 Tyler Carter16 авг. 2009 г., 07:00
Что этоclean функцию делать?
 wow16 авг. 2009 г., 07:01
дезинфицировать пользовательский ввод

Ответы на вопрос(4)

clean(), Пытатьсяmysql_real_escape_string() вместо.

Редактировать: Как сказано выше, код 302 означает «вас пересылают». Это не значит, что SQL-инъекция была успешной, так как это не значит, что это не так. В этом случае вы будете знать только то, что если вы можете определить, куда этот 302 пересылает вас, в «admin.php» или «login.php».

 Fredrik16 авг. 2009 г., 08:32
мы также знаем, что он не был успешным, и что редирект был на login.php (потому что именно тогда, когда он удаляет этот конкретный заголовок («Location: ...»), 302 больше не обнаруживается. Имея 302 в качестве указания на Успешная SQL-инъекция - это довольно умная идея, мне интересно, что они думают.
 wow16 авг. 2009 г., 08:09
чистая функция работает нормально. проблема возникла после} else {

чтобы серверы не возвращали сообщений об ошибках или, по крайней мере, очень общих сообщений. Например, на странице SQL Inject Me написано

Инструмент работает, посылая escape-строки базы данных через поля формы. Затем он ищет сообщения об ошибках базы данных, которые выводятся в визуализированный HTML-код страницы.

Поэтому, возможно, когда он видит код ответа 302, он предполагает, что ваше приложение возвращает слишком много информации. Вы можете проверить эту теорию, установив другой код состояния для своего ответа и посмотрев, выдаёт ли SQL Inject Me ошибку, например:

header('HTTP/1.1 404 Not Found');

Конечно, отправка им 404 не поможет вашему пользователю вернуться на страницу входа, поэтому вам, возможно, придется поэкспериментировать с другими сообщениями 3XX, возможно, 303 или 307.

Решение Вопроса

302 - это способ сервера сказать «Я хочу, чтобы вы пошли [куда-нибудь еще]» (в данном случае login.. Это не ошибка, а совершенно нормальный ответ. Особенно в вашем случае имеет гораздо больше смысла (если вы спросите меня) отправить пользователя на страницу входа после попытки внедрения SQL, чем впустить его.

 CloudyMarble22 февр. 2011 г., 09:55
+1 за правильный диагноз
 wow16 авг. 2009 г., 08:08
да .. имеет смысл

но я просто изучал этот вопрос и думал, что поделюсь для следующего человека.

После некоторого анализа мы пришли к выводу, что 302 сам по себе не является проблемой. Проблема заключается в том, какая страница предшествовала 302, которые могли быть отправлены, но были сметены 302, прежде чем они могли отображаться. Если предыдущая страница, полученная браузером (и, возможно, записанная Fiddler), содержала ошибки базы данных (или другую информацию, которую хакер мог бы найти полезной), то это плохо. Если 302 является первоначальным ответом и имеет пустое тело, просто заголовок, то я думаю, что вы в порядке.

Вы должны отобразить страницу с ошибкой (цель 302), поэтому я не вижу, как это можно рассматривать как «слишком много информации».

 terphi10 сент. 2014 г., 01:03
Да. На моем сайте 302 перенаправлял на страницу с сообщением об ошибке. Это была утечка информации в том смысле, что заявление tsql было раскрыто, но, похоже, не подвергало мой сайт инъекции.

Ваш ответ на вопрос