htmlspecialchars(针对xss)中断URL

时间:2019-07-01 08:40:34

标签: php url encoding xss htmlspecialchars

我查看了多个帖子,但找不到解决方案。

我想在以下代码的$ _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。

有什么建议吗? 谢谢。

1 个答案:

答案 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>';