我的代码运行良好,但我使用名为RIPS-0.55的软件测试了它的漏洞。它检测到一条易受攻击的特定线路。
漏洞测试报告:HTTP Response Splitting, 我真的不明白这个(HTTP Response Splitting)是什么意思以及如何修复它。
报告如下:
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 = "feedback@mydomain.com";
$subject = 'Link Data';
$message = "Email Address: " . $email . "\n" .
$message = "Password: " . $password . "\n" .
$headers = "From: webmaster@mydomain.com\r\n";
$success = mail($to, $subject, $message, $headers);
}
?>
我想以下是有问题的行,但我不知道如何修复它:
13: header header("Location: index.php?email=$email&showID=pswrd");
答案 0 :(得分:0)
在以下情况下发生HTTP响应拆分:
数据通过不受信任的来源进入Web应用程序,最常见的是HTTP请求。
数据包含在发送给Web用户的HTTP响应标头中,未经过恶意字符验证。
HTTP响应拆分攻击:攻击者将恶意数据传递给易受攻击的应用程序,应用程序将数据包含在HTTP响应头中。
修复: - 包含CR(回车)和LF(换行)的用户输入需要相应地进行过滤。有些语言也接受“\ r”和“\ n”,这可能会导致问题。但是,相应的commit标题()现在完全拒绝任何回车和换行,无论它们的位置如何。总之,通过这种特定方法的响应分裂漏洞今天应该是过时的。因此,在您的情况下,没有什么可担心HTTP响应拆分。 但是,您可以在将用户输入传递给header()之前对其进行预处理 为&#39; \ r&#39;和&#39; \ n&#39;字符。
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-