如何修复代码的漏洞?

时间:2018-06-01 09:08:43

标签: php mysql http mysqli

我的代码运行良好,但我使用名为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");

1 个答案:

答案 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-