我查看了多个帖子,但找不到解决方案。
我想在以下代码的$ _SERVER变量上添加htmlspecialchars,以防止XSS。
echo '<script type="text/javascript">window.location = "'.htmlspecialchars($_SERVER['HTTP_HOST']).htmlspecialchars($_SERVER['REQUEST_URI']).'";</script>';
问题在于该函数通过转义引号和&符来破坏URL
在类似的主题上,一些用户建议使用urlencode而不是htmlspecialchars,但是urlencode并不意味着要防止在上面的HTML代码上使用xss。
有什么建议吗? 谢谢。
答案 0 :(得分:2)
您的示例将值放在JavaScript中,而不是HTML中。具有XSS保护的问题是,没有一个万能的。您需要根据输出的上下文来调整方法。
对于JavaScript,它是JSON。您需要将值编码为JSON并将其输出到JavaScript。由于JSON是JavaScript的子集,因此您可以按原样输出它,而无需引号或进一步转义。
echo '<script type="text/javascript">window.location = '.
json_encode($_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']).
';</script>';