来自XSS的$ _SERVER ['QUERY_STRING']安全吗?

dim*_*414 6 php xss http

我需要构建一个表单,其动作将您带回到完全相同的页面 - 包括GET参数.我想我可以说一些效果:

echo '<form action="'.$_SERVER['SCRIPT_NAME'].'?'.$_SERVER['QUERY_STRING'].
     '" method="post">'
Run Code Online (Sandbox Code Playgroud)

这似乎有效,并且测试传递几个XSS攻击似乎是成功的,因为QUERY_STRING的输出似乎是URL编码的.但是PHP文档没有提到这一点,所以我不相信我会相信这种行为.

以我上面的方式使用QUERY_STRING是否安全?如果没有,我该怎么办呢?我们将不胜感激参考文献.

更新已切换到SCRIPT_NAME,只是混淆了哪一个是好的,这在我脑子里很糟糕,谢谢你抓住我. action=""很好地解决了我的具体问题,但我仍然很好奇QUERY_STRING是否经过预处理,因此可以安全使用或不使用,因为有时你可能想重新使用查询字符串,假设这样做是安全的.

dim*_*imi 8

你永远不应该相信$ _SERVER ['QUERY_STRING'],因为它可以用于XSS攻击.

在您的情况下,可以通过以下方式利用此漏洞:

http://your.server.com/your_script.php?"><script>alert(111);</script>
Run Code Online (Sandbox Code Playgroud)

请注意,上面的代码适用于IE; FireFox和Chrome会在将查询字符串发送到Web服务器之前对其进行高效编码.

我会像每个用户输入一样用htmlentities(请注意double_encode参数)来包装它.

祝好运!