我需要创建一个表单,它的操作将带您返回到完全相同的页面 - 包括GET参数。我想我可以这样说:
echo '<form action="'.$_SERVER['SCRIPT_NAME'].'?'.$_SERVER['QUERY_STRING'].
'" method="post">'
这似乎有效,测试通过了一些XSS攻击,因为QUERY_STRING的输出似乎是URL编码的。然而,PHP文档没有提到这一点,所以我不确定我能信任这种行为。
我上面的用法是否安全?如果不安全,我该怎么做?欢迎提供文档参考。
更新:切换到SCRIPT_NAME,我的脑子里混淆了哪个是好的,哪个是坏的,感谢指出错误。使用action=""
可以很好地解决我的特定问题,但我仍然想知道QUERY_STRING是否被预处理过,以便安全使用,因为有其他时候你可能想要重复使用查询字符串,假设它是安全的。
PHP_SELF
本身是有漏洞的,对吧?正如上面的评论所说,最好将 action 留空。 - BoltClockaction
设为空并不意味着您可以免受假定的 XSS 攻击,但它会给您相同的行为。 - Amil Waduwawara