Невозможно перенаправить с помощью htmlspecialchars () на urlencode () - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь перенаправить пользователя на requested_page после входа в систему, после поиска в Google, я попробовал этот код

ссылка на страницу входа

echo "<a href='/login.php?ref=". urlencode($_SERVER['REQUEST_URI']) ."'>login</a>";

и в логин. php

    if ($_GET['ref'] != '') {
        $url = $_GET['ref'];
    } else {
        $url = "/";
    }

if ($user->login($username, $password)) {
            $_SESSION['username'] = $username;
            header("location:http://" . $_SERVER['HTTP_HOST'].$url);
            exit();
        }

Вышеописанный метод работает нормально, но он уязвим для XSS

login.php?ref=<script>alert(%27Malicious%20content%27)</script>

поэтому я добавил htmlspecialchars() вот так

    if ($_GET['ref'] != '') {
        $url = htmlspecialchars($_GET['ref']);
    } else {
        $url = "/";
    }

но он не перенаправлен, скорее он показывает 404 error

любую помощь как мне защитить от XSS атака

1 Ответ

0 голосов
/ 14 февраля 2020

окончательно решено.

Произошла ошибка из кода отладки

if ($_GET['ref'] != '') {
    $url = htmlspecialchars($_GET['ref']);
} else {
    $url = "/";
}

<h6 class="small text-black-50">Log in with social media account or email</h6>
 <?= $_SERVER['HTTP_HOST'].$url ?>

, это создало проблему

<?= $_SERVER['HTTP_HOST'].$url ?>

, удалило эту строку и решило.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...