“不要直接访问Superglobal $ _REQUEST数组。” Netbeans 8.0 PHP

时间:2014-04-28 01:12:36

标签: php netbeans

在阅读了其他一些问题之后,我们会问这个问题。

Do not access superglobal $_GET array directly

“Do not Access Superglobal $_SERVER Array Directly” on Netbeans 7.4 for PHP

Why is filter_input() incomplete?

我已经加载了最新版本Netbeans 8.0,我看到了警告

  

不要直接访问Superglobal $ _REQUEST数组。

很好,我很高兴在我做一些可以改进的事情时出现,所以我看看hints

这个建议非常简单。

  

使用一些过滤功能(例如filter_input(),条件   with _ *()函数等。)。

所以我开始研究fliter_input(),但它尚未针对$_REQUEST实施。这似乎有点死路一条。

然后我读了一些非常有帮助的内容(@bobince)" 在你的脚本开始时,当你进行过滤时,你不知道你的输入将去哪里最终,所以你不知道如何逃避它。"

它提醒我,我确切地知道我的输入将在哪里结束,以及它将用于什么。所以,我想问每个人我将采取的方法是safe

我正在设计一个REST- ish API,我使用$_SERVER['REQUEST_METHOD'];来确定需要返回的资源。我还使用了$_REQUEST['resource']; URI/api/之后.htaccess rewrite之后的所有内容都应该包含$_SERVER['REQUEST_METHOD'];

我对我的方法的问题是:

  1. 如果我始终确认GET符合要求PUT POST DELETE $_REQUEST['resource'];(我还需要做),那真的有吗一个没有过滤输入的问题?
  2. 我应该使用filter_input (INPUT_GET, 'resource');访问404 Not Found吗?当这只用于确定资源,以及无法确定资源的位置时(比如有人试图添加恶意代码),我们将无法找到资源并返回{{1}}状态。
  3. 我还需要考虑其他因素吗?我错过了理解中的任何重要事项吗?
  4. 我意识到,对于仅被视为警告的内容似乎很担心,但根据我的经验,只修复错误会给你工作代码,但修复警告将有助于您理解 代码的工作原理

1 个答案:

答案 0 :(得分:3)

  

所以我开始研究fliter_input(),但它尚未针对$_REQUEST实施。这似乎有点死路一条。

我认为这不是一个死胡同,而是故意的。 filter_input()要求您明确指定输入类型。 $_REQUEST不清楚它,它包含来自各种来源的输入,允许一个来源覆盖另一个来源。

除此之外,这也不是警告确实要告诉你的。将像$_GET这样的超全局交换为具有同样超全局函数的filter_input(INPUT_GET, ...),显示出相同的设计缺陷。但Netbeans不能轻易地警告你。

摆脱超级全球已经是一个好主意。

相反,将输入数据注入到低级别的应用程序,例如:引导请求信息,不要在代码的其余部分使用任何超全局和filter_input函数。

这样,即使没有实际请求,也可以轻松模拟任何请求方法。