Php 无法在urlencode()上使用htmlspecialchars()重定向

Php 无法在urlencode()上使用htmlspecialchars()重定向,php,xss,Php,Xss,我试图在登录后将用户重定向到请求页面,在谷歌搜索后我尝试了此代码 登录页面链接 echo "<a href='/login.php?ref=". urlencode($_SERVER['REQUEST_URI']) ."'>login</a>"; 上述方法工作正常,但容易受到XSS login.php?ref=警报(%27恶意%20内容%27) 所以我像这样添加了htmlspecialchars() if ($_GET['ref'] != '') {

我试图在登录后将用户重定向到
请求页面
,在谷歌搜索后我尝试了此代码

登录页面链接

echo "<a href='/login.php?ref=". urlencode($_SERVER['REQUEST_URI']) ."'>login</a>";
上述方法工作正常,但容易受到XSS

login.php?ref=警报(%27恶意%20内容%27)

所以我像这样添加了
htmlspecialchars()

    if ($_GET['ref'] != '') {
        $url = htmlspecialchars($_GET['ref']);
    } else {
        $url = "/";
    }
但它不会被重定向,而是显示
404错误

任何关于如何防止XSS攻击的帮助最终解决

错误是从调试代码创建的

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 ?>
if($\u GET['ref']!=''){
$url=htmlspecialchars($_GET['ref']);
}否则{
$url=“/”;
}
使用社交媒体帐户或电子邮件登录
这就产生了一个问题

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


并删除此行并解决。

echo'
和重定向部分:
头('Location:http://'.$\u SERVER['http\u HOST'.$\u GET['ref'])@RolandStarke仍然不能工作我看到
XSS
脚本代码输出
。XSS漏洞在哪里?当我尝试
http://localhost:8000/login.php?ref=%3Cscript%3Ealert(%27%20内容%27)%3C/script%3E
我看到
警报
这是我的问题。如果您在
之后删除了带有XSS漏洞的代码,那么XSS漏洞就消失了,您无需再做任何事情。
<?= $_SERVER['HTTP_HOST'].$url ?>