PHP知识、源码、教程、框架、程序分享! -- PHP社区 关于我们 联系我们 联系电话 联系QQ

PHP参数处理函数register_globals (On,Off)

发表时间:2013-10-18 点击:

[本文摘要]:PHP 参数处理方式register_globals (On,Off) 适用范围:PHP_INI_SYSTEM默认值:Off 如果你已经使用 PHP 4 之前的版本,这个指令色变到足以引起牙齿和咬牙切齿的头发拉。在4.2.0版本中,这项指示是...

PHP参数处理函数register_globals (On,Off)

适用范围:PHP_INI_SYSTEM默认值:Off

如果你已经使用PHP 4之前的版本,这个指令色变到足以引起牙齿和咬牙切齿的头发拉。在4.2.0版本中,这项指示是默认情况下禁用,迫使许多长时间PHP用户完全重新思考(在某些情况下重写)他们的Web应用程序开发的方法。这种变化,虽然成本相当混乱,最终在更大的应用程序的安全方面提供开发者的最佳利益。如果你是新所有这一切,有什么大不了的?

从历史上看,所有的外部变量,自动在全球范围内注册。也就是说,任何传入的变量类型COOKIE ,环境, GET,POST和SERVER全球范围内提供。因为他们是全球,他们也是全球范围内修改。

虽然这可能看起来方便对一些人来说,它也推出了安全缺陷,因为变量拟单独管理使用Cookie ,将来也可能通过URL进行修改。例如,假设通过cookie跨页连通会话标识符唯一地识别用户。任何人,但用户应该看到的数据,最终映射到由该会话标识符标识的用户。用户可以打开的cookie ,复制的会话标识符,并将其粘贴到结尾的网址,是这样的: http://www.example.com/secretdata.php?sessionid=4x5bh5H793adK

然后,用户可以电子邮件链接到其他一些用户。如果没有其他安全的地方限制( IP标识,例如) ,这第二个用户将能够看到其他机密数据。禁用了register_globals指令,防止这种行为发生。虽然这些外部变量保持在全球范围内,每个人都必须被称为配合其类型。例如,在前面的例子中使用的SessionID变量,而不是被称为纯粹为:

	$_COOKIE['sessionid']

任何试图修改此参数使用任何其他方法(GET或POST ,例如)会导致一个新的变量,这意味着在全球范围内($_GET [ 'sessionid' ]或$_POST [ 'sessionid'] ) 。在第3章,节“ PHP的超全局变量”提供一个全面的介绍到COOKIE ,环境,  ENVIRONMENT,POST,服务器类型的外部变量。

虽然不允许register_globals明确是一个好主意,它是不是唯一的因素,你应该记住,当你确保应用程序。关于PHP应用程序的安全性提供了更多的信息。

版权声明:本文系技术人员研究整理的智慧结晶,转载勿用于商业用途,并保留本文链接,侵权必究!

本文链接:http://php.aixc.cn/phpzs/phphanshu/413.html

声明:本站技术及源码均为原创,转载请勿用于商业用途,并注明出处及原文链接,侵权必究。