Ste*_*hen 0 php frameworks request superglobals unset
我建立一个PHP框架,并在其中我有一个解析URL还有一个请求对象$_GET,$_POST和$_FILE超全局变量.
我想鼓励安全的网络习惯,所以我保护数据不受SQL注入等的影响.
为了确保此框架的用户通过请求对象访问安全,干净的数据,我计划unset($_GET, $_POST, $_REQUEST);在解析这些变量后使用.
我将在方法注释中记录这一点,并在框架文档中解释这种情况.
我的问题是:这是否是理想的行为?我没有预料到的潜在陷阱是什么?
我知道这已经回答了,但这是我的0.02美元.
我不会取消或清除输入数组.但是,我所做的是用一个对象替换它们.因此,我没有使用原始数组,而是将其替换为实现ArrayAccess和的对象Iterator.这样,使用本机数组的绝大多数代码仍然可以很好地与对象一起工作.
理由是,至少可以通过测试验证代码路径是否正常运行.您可以使用模拟对象替换这些对象,以便在测试期间抛出异常,以便您可以检测对这些数组的不正确访问(如果您确定它是"不良做法").因此,它允许您在生产期间运行而不会产生不必要的限制,但也允许您打开它以验证测试期间的最佳实践.
虽然我同意@JW关于转义,但你应该过滤输入.过滤,逃脱.任何时候数据进入您的程序(通过用户输入或从数据库),将其过滤到预期值.任何时候数据输出(无论是数据库还是用户),您都需要为该介质正确地转义数据.因此,使用能够轻松过滤提交数据的请求对象非常有价值.
使用流畅界面的示例(您可能想要也可能不想要):
$id = $request->get('some_id')->filter('int', array('min' => 1));
Run Code Online (Sandbox Code Playgroud)
这不包括补偿不同平台和配置的好处(例如,如果magic_quotes_gcp启用或不启用等)......
无论如何,这只是我的意见......