原标题:PHP项目安全:防止全局变量覆盖
在PHP全局变量功能开启的情况下,传递过来的数据会被直接注册为全局变量使用,如图1所示。在关闭的情况下,PHP会把接收到的数据存放在规定好的全局数组中。
图1 PHP全局变量开启
图1中将register_globals设置为全局变量开启。接下来用下面的一段代码提交一个用户登录的表单,其中包含用户名和密码。
当register_globals=On时,程序可以直接使用$username和$password来接收值,同时用户也可以定义其他全局变量。
例如,register_globals配置选项打开之后,可导致下面代码中的$authorized变量被覆盖,无需认证用户名和密码就可以直接设置authorized的值为true,跳过认证进入登录状态,这会造成很大的安全隐患。
if(authenticated_user) { // 认证用户是否登录
$authorized=true; // authorized变量可以被覆盖
}
如图2所示,设置PHP配置文件中register_globals=Off,程序只能使用$_GET['username']、$_GET['password']或$_REQUEST['username']、$_ REQUEST['password']来接收传递过来的值。
图2 关闭全局变量
在PHP 5.3之前的版本中,register_globals默认为开启状态。为了防止产生安全隐患,在PHP 5.3中将register_globals设置为关闭状态。在新版的PHP 5.6及PHP 7中,官方已经将register_globals选项去除,以防止全局变量的产生。返回搜狐,查看更多
责任编辑: