无法通过urlencode()上的htmlspecialchars()进行重定向

问题描述 投票:-1回答:1

登录后尝试将用户重定向到requested_page,在使用谷歌搜索后,我尝试了此代码

登录页面链接

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

以及login.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攻击

php xss
1个回答
0
投票

最终解决。

错误是通过调试代码创建的

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 ?>

并删除此行并解决。

© www.soinside.com 2019 - 2024. All rights reserved.