PHP安全之register_globals的on和off的区别

1. register_globals的概念

register_globals是PHP的一个配置选项,用于控制是否将POST、GET和COOKIE中的变量自动注册到全局变量中。当register_globals设置为on时,PHP会将这些变量自动注册为全局变量,可以在脚本的任何地方使用。而当register_globals设置为off时,这些变量就不会被自动注册为全局变量,需要使用$_POST、$_GET和$_COOKIE等超全局变量来访问。

2. register_globals的on和off的区别

2.1 安全性

将register_globals设置为on可能会导致安全问题。当register_globals为on时,攻击者可以通过构造特定的URL或提交特殊的表单数据,将数据赋值给脚本中的变量,从而覆盖原有变量的值。这样的话,攻击者就可以执行某些恶意操作,比如修改数据库中的数据、执行远程代码等。因此,在安全性方面,建议将register_globals设置为off。

在register_globals为on时,攻击者可以通过构造URL或提交表单数据,强制赋值变量,进而修改数据。

2.2 全局变量的冲突

当register_globals为on时,如果多个请求同时使用了相同的变量名,就可能会造成变量的冲突。这可能会导致脚本出现不可预料的结果,甚至引发错误。因此,在编写脚本时,需要格外注意全局变量的命名,避免与其他代码冲突。

2.3 程序移植性

将register_globals设置为off可以提高程序的移植性。因为在register_globals为off时,无论在任何服务器上运行,都可以使用$_POST、$_GET和$_COOKIE等超全局变量来获取用户提交的数据。而将register_globals设置为on的情况下,则必须依赖于服务器的配置,可能会导致程序在不同的环境下运行出现问题。

3. 如何关闭register_globals

关闭register_globals的方法有以下几种:

3.1 在php.ini中进行配置

register_globals = Off

修改php.ini文件,将register_globals设置为Off。这样一来,所有的PHP脚本都会遵循该设置。但是需要注意的是,修改php.ini文件可能会影响整个服务器上的其他PHP应用程序,需谨慎操作。

3.2 在.htaccess文件中进行配置

php_flag register_globals off

在.htaccess文件中添加一行代码php_flag register_globals off,即可关闭register_globals。这种方法相对较为灵活,只对当前目录及其子目录下的PHP脚本生效。

3.3 在脚本中使用ini_set函数进行配置

ini_set('register_globals', 'off');

在脚本中使用ini_set函数将register_globals设置为off,可以临时关闭register_globals。这种方法适用于只在特定脚本中关闭register_globals的情况。

4. register_globals的历史

register_globals在过去是PHP默认的配置选项,而且在某些旧版本的PHP中默认值是on。但随着PHP的发展和漏洞的曝光,register_globals被认为是一个安全风险,并且在PHP 5.4.0版本开始移除了该选项。由于register_globals的潜在风险,PHP官方建议将其设置为off或通过其他方式来避免使用全局变量。

总之,register_globals的on和off的区别主要在于安全性、全局变量的冲突和程序的移植性。为了保障脚本的安全性,建议将register_globals设置为off,并采用$_POST、$_GET和$_COOKIE等超全局变量来访问用户提交的数据。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签