我最近遇到了几个流行的
PHP相关答案,建议使用超全局$_REQUEST,我认为是代码气味,因为它让我想起了register_globals.
你能提供一个很好的解释/证据,为什么$_REQUEST是不好的做法?我会抛出我挖掘的几个例子,并且会更多地了解理论攻击向量和现实世界漏洞的信息/观点,以及系统管理员可以采取的合理步骤来降低风险的建议(缺少重写应用程序…或者,我们需要去管理并坚持重写吗?
示例漏洞:默认GPC阵列merge-order意味着COOKIE值覆盖GET和POST,因此$_REQUEST可用于XSS和HTTP攻击. PHP允许cookie vars覆盖超全局数组. this talk的前10张幻灯片给了例子(整个演讲很棒). phpMyAdmin exploit CSRF攻击示例.
示例对策:将GPC中的$_REQUEST数组合并顺序重新配置为CGP,以便GET / POST覆盖COOKIE,而不是相反.使用Suhosin阻止超级页面的覆盖.
(另外,不要问我是否认为我的问题是一个欺骗,但是很高兴地,“When and why should $_REQUEST be used instead of $_GET / $_POST / $_COOKIE?”的绝对的答案是“从不”.)