"不要直接访问Superglobal $ _REQUEST数组." Netbeans 8.0 PHP

sam*_*azi 11 php netbeans

在阅读了其他几个问题后,我们会问这个问题.

不要直接访问超全局$ _GET数组

在Netbeans 7.4 for PHP上"不要直接访问Superglobal $ _SERVER数组"

为什么filter_input()不完整?

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

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

太棒了,我很高兴能在我做一些可以改进的事情时出现,所以我看看hints.

这个建议很简单.

请改用一些过滤函数(例如filter_input(),带有_*()函数的条件等).

所以我开始研究fliter_input()它尚未实现$_REQUEST.这似乎有点死路一条.

然后我读了一些非常有帮助的东西(@bobince)" 在你的脚本开始过滤时,你不知道你的输入最终会在哪里,所以你不知道如何逃避它. "

它提醒我,我确切地知道我的输入最终会在哪里,以及它将用于什么.所以,我想问问每个人我将采取的方法是否基本上是safe.

我正在设计一个REST- ish API,我$_SERVER['REQUEST_METHOD'];用来确定需要返回的资源.我也使用$_REQUEST['resource'];它应该包含的一切URI/api/跟随.htaccess rewrite.

我对我的方法的问题是:

  1. 如果我总是验证$_SERVER['REQUEST_METHOD'];是否符合要求GET PUT POST DELETE(无论如何我都需要做),是否真的存在不填写输入的问题?
  2. 我应该$_REQUEST['resource'];通过使用来访问filter_input (INPUT_GET, 'resource');吗?当这只用于确定资源,以及无法确定资源的地方(比如有人试图添加恶意代码)时,我们根本找不到资源并返回404 Not Found状态.
  3. 我是否需要考虑其他因素,并且错过了我理解中的任何重要事项?

我意识到,对于仅被视为警告的内容,这看起来似乎很多,但是根据我的经验,只修复错误将为您提供工作代码,但修复警告将帮助您理解代码的工作原理.

hak*_*kre 3

所以我开始研究fliter_input()它尚未实现$_REQUEST。这似乎有点死胡同。

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

除此之外,这也不是警告想要告诉您的内容。将超全局 like$_GET与同样超全局的函数 like交换filter_input(INPUT_GET, ...)显示出相同的设计缺陷。但 Netbeans 无法如此轻松地警告您。

摆脱超全局变量已经是一个好主意了。

相反,将输入数据注入到应用程序的低级别位置,例如引导请求信息,并且不要使用任何超全局变量或代码filter_input其余部分中的函数。

这将允许您轻松模拟任何请求方法,甚至无需实际请求。