我最近发现了几个与PHP相关的流行答案,建议使用超全球$_REQUEST
,我认为它是代码味道,因为它让我想起了register_globals
.
你能提供一个很好的解释/证据,说明为什么$_REQUEST
不好的做法?我将抛出一些我挖出的例子,并希望获得关于理论攻击向量和现实漏洞的更多信息/观点,以及系统管理员可以采取的合理步骤的建议,以降低风险(缺少重写应用程序......或者,我们是否需要去管理层并坚持重写?).
漏洞示例:默认GPC
阵列合并顺序意味着COOKIE值覆盖GET和POST,因此$_REQUEST
可用于XSS和HTTP攻击.PHP允许cookie变量覆盖超全局数组.本讲座的前10张幻灯片给出了一些例子(整个讲座很棒).phpMyAdmin利用 CSRF攻击的例子.
示例对策:重新配置$_REQUEST
数组合并顺序 GPC
从而CGP
使GET/POST覆盖COOKIE,而不是反过来.使用Suhosin阻止覆盖超全球.
(另外,不会问我是否认为我的问题是一个骗局,但很高兴得到压倒性的回答"何时以及为什么要使用$ _REQUEST而不是$ _GET/$ _POST/$ _COOKIE?"是"从不". )
只需按原样对待:从用户获取数据的方法.它必须经过消毒和验证,那么你为什么要关心它是以POST,GET还是cookie的形式出现的呢?它们都来自用户,所以说'他们可以被欺骗!' 是多余的.
它容易受到 URL 上传递的任何内容的影响。因此,如果表单包含一个带有与表单一起提交的“userid”的隐藏字段,尽管理论上用户无法编辑它,但如果足够热心,没有什么可以阻止他们更改值。
如果您只想从请求中获取值,那很好,但您需要注意它很可能被欺骗,因此您需要采取相应的行动,并且当然不要将其用于安全参数/值数据。