在阅读了其他一些问题之后,我们会问这个问题。
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'];
。
我对我的方法的问题是:
GET
符合要求PUT
POST
DELETE
$_REQUEST['resource'];
(我还需要做),那真的有吗一个没有过滤输入的问题?filter_input (INPUT_GET, 'resource');
访问404 Not Found
吗?当这只用于确定资源,以及无法确定资源的位置时(比如有人试图添加恶意代码),我们将无法找到资源并返回{{1}}状态。我意识到,对于仅被视为警告的内容似乎很担心,但根据我的经验,只修复错误会给你工作代码,但修复警告将有助于您理解 代码的工作原理 。
答案 0 :(得分:3)
所以我开始研究
fliter_input()
,但它尚未针对$_REQUEST
实施。这似乎有点死路一条。
我认为这不是一个死胡同,而是故意的。 filter_input()
要求您明确指定输入类型。 $_REQUEST
不清楚它,它包含来自各种来源的输入,允许一个来源覆盖另一个来源。
除此之外,这也不是警告确实要告诉你的。将像$_GET
这样的超全局交换为具有同样超全局函数的filter_input(INPUT_GET, ...)
,显示出相同的设计缺陷。但Netbeans不能轻易地警告你。
摆脱超级全球已经是一个好主意。
相反,将输入数据注入到低级别的应用程序,例如:引导请求信息,不要在代码的其余部分使用任何超全局和filter_input
函数。
这样,即使没有实际请求,也可以轻松模拟任何请求方法。