当前位置:  开发笔记 > 编程语言 > 正文

$ _REQUEST有多邪恶,什么是可接受的创可贴对策?

如何解决《$_REQUEST有多邪恶,什么是可接受的创可贴对策?》经验,为你挑选了3个好方法。

我最近发现了几个与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?"是"从不". )



1> Javier..:

只需按原样对待:从用户获取数据的方法.它必须经过消毒和验证,那么你为什么要关心它是以POST,GET还是cookie的形式出现的呢?它们都来自用户,所以说'他们可以被欺骗!' 是多余的.



2> Joe Scylla..:

$ _REQUEST是一个邪恶的$ _GET,$ _POST和$ _COOKIE.虽然我认为有使用$ _REQUEST的有效方案,但有一个很好的理由不使用$ _REQUEST并将其标记为"不良做法".

使用$ _REQUEST的主要原因是参数可以在$ _POST或$ _GET中传输.通过访问$ _REQUEST,您不必同时检查$ _GET和$ _POST值.问题是ini设置gpc_order可以改变构建$ _REQUEST的行为.此设置可能因服务器而异,您的脚本可能会更改行为.



3> troelskn..:

$_REQUEST是有问题的,因为它忽略了URL($_GET)和请求body($_POST)之间的区别.HTTP-GET请求应该没有副作用,而HTTP-POST可能有副作用,因此无法缓存.将这些完全不同的数据源放入一个存储桶中,需要调用非REST -ful的应用程序,即不良应用程序.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有