【问题标题】:Do not access superglobal $_GET array directly不要直接访问超全局 $_GET 数组
【发布时间】:2014-01-22 14:09:30
【问题描述】:

我是 PHP 新手,如果这是一个愚蠢的问题,请原谅我,但为什么我不应该直接访问超全局数组中的项目? NetBeans 警告我不要这样做(见标题),我在其他地方也读到过同样的内容——但我还没有找到好的解释。

会出什么问题?是否存在安全问题,例如 SQL 注入?还是别的什么?

StackOverflow 上有几个类似的问题,但没有一个答案能真正解释问题所在:他们只是建议使用filter_input()。这并不让我满意,因为我喜欢了解事物的运作方式。任何解释将不胜感激。

【问题讨论】:

  • 您的数据可能被黑客劫持......
  • 因为您从未知客户端收到的数据可能已损坏。数据库丢失是这里最小的问题。 XSS 或使用您的服务器对他人进行垃圾邮件攻击会造成很多麻烦,只是因为您没有验证用户输入。
  • 您可以在phptherightway.com/#data_filtering找到有用的提示
  • $_GET$_POST 对您的 PHP 脚本构成完全相同的安全威胁。当某些东西说不要直接访问时,它的意思是“不要相信提供数据的来源,确保在脚本中使用它之前进行清理和验证”。不使用$_GET 的一个很好的理由是在提交表单时,因为它可能会导致浏览器历史跟踪,所以如果它是一个登录屏幕,那么您可以看到someScript.php?user=something&password=plainText,但是使用 POST 您将无法看到这些值通过了。
  • 感谢@a.yastreb,现在阅读。

标签: php security validation xss


【解决方案1】:

嗯,一般情况下直接使用超级全局变量是没有坏处的,

但为了安全起见并避免一长串可能的攻击,您应该过滤来自用户的数据,然后在您的应用程序中使用它们之前抛出这些变量

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    相关资源
    最近更新 更多