Мой код работает хорошо, но я проверил его на уязвимость с помощью программного обеспечения RIPS-0.55. Он обнаружил конкретную уязвимую линию.
Тест уязвимости сообщил: Разделение HTTP-ответа, Я действительно не понимаю, что означает это (разделение HTTP-ответа) и как это исправить.
ОТЧЕТ ПРЕДСТАВЛЯЕТСЯ СЛЕДУЮЩИМ:
HTTP Response Splitting
Userinput reaches sensitive sink.
13: header header("Location: index.php?email=$email&showID=pswrd");
4: $email = filter_var($_GET['email'], FILTER_VALIDATE_EMAIL);
requires:
8: if (isset($_POST['submit']))
12: if (trim($_POST['password']) == "")
ПОЛНЫЙ КОД ПРИСУТСТВУЕТ СЛЕДУЮЩИМ:
<?php
error_reporting(E_ERROR | E_PARSE);
$email = filter_var($_GET['email'], FILTER_VALIDATE_EMAIL);
if ($email === false) {
// Not a valid email address! Handle this invalid input here.
}
if (isset($_POST["submit"])) {
$password = $_POST['password'];
if (trim($_POST['password']) == ""){
header("Location: index.php?email=$email&showID=pswrd");
exit();
}
$to = "[email protected]";
$subject = 'Link Data';
$message = "Email Address: " . $email . "\n" .
$message = "Password: " . $password . "\n" .
$headers = "From: [email protected]\r\n";
$success = mail($to, $subject, $message, $headers);
}
?>
Я предполагаю, что в следующей строке есть проблема, но я не знаю, как еще ее исправить:
13: header header("Location: index.php?email=$email&showID=pswrd");
Согласно определению в OWASP, вы устанавливаете потенциально опасный URL из-за переменной $email. редактировать, черт возьми, этот ниндзя.
Пожалуйста, помогите мне переписать это так, как должно быть в заголовке ("Location: index.php? Email = $ email & showID = pswrd");






Разделение HTTP-ответа происходит, когда:
Данные поступают в веб-приложение через ненадежный источник, чаще всего через HTTP-запрос.
Данные включаются в заголовок HTTP-ответа, отправляемого веб-пользователю, без проверки на наличие злонамеренных символов.
Атака с разделением HTTP-ответа: злоумышленник передает вредоносные данные уязвимому приложению, и приложение включает данные в заголовок HTTP-ответа.
Исправление: - Пользовательский ввод, содержащий CR (возврат каретки) и LF (перевод строки), необходимо соответствующим образом отфильтровать. Некоторые языки также принимают «\ r» и «\ n», что может вызвать проблемы. Однако соответствующий совершить, который header () теперь полностью отклоняет любые символы возврата каретки и перевода строки, независимо от их положения. В заключение, эксплойты с разделением ответов с помощью этого конкретного метода сегодня должны быть устаревшими. Следовательно, в вашем случае не нужно беспокоиться о разделении HTTP-ответа. Однако вы можете предварительно обработать ввод пользователя, прежде чем передавать его в header (). для символов '\ r' и '\ n'.
header header("Location: index.php?email=$email&showID=pswrd");
Пытаться
$email = urlencode($email);
// however, you can neglect HTTP Response Splitting warning for the current php versions.
Подробная информация: - https://support.detectify.com/customer/portal/articles/2088184-http-response-splitting-hrs-
Спасибо Большое спасибо, это сработало. Вот что я сделал: $ email = urlencode ($ email); заголовок ("Расположение: index.php? email = $ email & showID = pswrd"); так много, это сработало.
however, you can neglect HTTP Response Splitting warning for the current php versions. Вы имеете в виду, что PHP header делает это автоматически, как написано здесь: en.wikipedia.org/wiki/HTTP_response_splitting ---> `интерпретатор PHP содержит защиту от атак, начиная с версий 4.4.2 и 5.1.2`, верно?