不要直接访问超全局变量 $_GET 数组,应使用过滤器或者其他安全的方式获取其中的值。

4
我是PHP新手,如果这是一个愚蠢的问题,请原谅我,但为什么我不应该直接访问superglobal数组中的项目?NetBeans警告我不要这样做(见标题),我已经在其他地方读到同样的警告 - 但我还没有遇到过一个好的解释。
会出现什么问题?这是一个安全问题,如SQL注入吗?还是其他原因?
StackOverflow上有几个类似的问题,但没有一个答案真正解释了问题:它们只是建议使用filter_input()。这并不能满足我,因为我喜欢知道事情是如何工作的。任何解释都将不胜感激。

您的数据可能会被黑客劫持... - user1844933
由于你从未知客户端接收的数据可能已损坏,数据库丢失只是其中最小的问题。跨站脚本攻击(XSS)或利用你的服务器对其他人进行垃圾邮件攻击可能会造成很多麻烦,仅因为你没有验证用户输入。 - Realitätsverlust
1
您可以在http://www.phptherightway.com/#data_filtering找到有用的技巧。 - a.yastreb
1
$_GET和$_POST对您的PHP脚本构成完全相同的安全威胁。当某些东西说不要直接访问时,它所传达的意思是“不要相信提供数据的来源,在使用脚本之前,请务必进行净化和验证”。不使用$_GET的一个很好的理由是在提交表单时,因为它会导致浏览器历史记录跟踪,所以如果是登录屏幕,则可以看到someScript.php?user=something&password=plainText,但使用POST则无法查看传递的值。 - MonkeyZeus
感谢 @a.yastreb,现在正在阅读。 - Obversity
显示剩余2条评论
1个回答

1
在正常情况下,直接使用超全局变量是没有害处的,但为了保险起见并避免可能攻击的长列表,您应该在使用它们之前过滤来自用户的数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接