Как мне исправить уязвимость моего кода?

Мой код работает хорошо, но я проверил его на уязвимость с помощью программного обеспечения 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");
«Я действительно не понимаю, что означает это (разделение HTTP-ответа)» - почему бы и нет? Основное объяснение, которое дает en.wikipedia.org/wiki/HTTP_response_splitting, довольно ясно, не так ли? И OWASP более подробно описывает, даже с примерами, owasp.org/index.php/HTTP_Response_Splitting
CBroe 01.06.2018 11:18

Согласно определению в OWASP, вы устанавливаете потенциально опасный URL из-за переменной $email. редактировать, черт возьми, этот ниндзя.

Loek 01.06.2018 11:18

Пожалуйста, помогите мне переписать это так, как должно быть в заголовке ("Location: index.php? Email = $ email & showID = pswrd");

Eric 01.06.2018 11:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
381
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Разделение 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"); так много, это сработало.

Eric 01.06.2018 12:12
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`, верно?
tonix 22.08.2018 22:26

Другие вопросы по теме