background image

RegisterGlobals

php>=4.2.0,php.ini 的 register_globals 选项的默认值预设为 Off,当 register_globals

的设定为 On 时,程序可以接收来自服务器的各种环境变量,包括表单提交的变量,而且由于 PHP 不
必事先初始化变量的值,从而导致很大的安全隐患。

例 1:

//check_admin()用于检查当前用户权限,如果是 admin 设置$is_admin 变量为 true,然后下面判断
此变量是否为 true,然后执行管理的一些操作。

1.

//ex1.php

 

2.

3.

if

(check_admin()) 

4. { 
5.

$is_admin

=true; 

6. } 
7.

if

(

$is_admin

8. { 
9. do_something(); 
10. } 
11. ?> 

这一段代码没有将$is_admin 事先初始化为 Flase,如果 register_globals 为 On,那么我们直接提交

http://www.sectop.com/ex1.php?is_admin=true

,就可以绕过 check_admin()的验证:

例 2:

1.

//ex2.php

 

2.

3.

if

(isset(

$_SESSION

[

"username"

])) 

4. { 
5. do_something(); 
6. } 
7.

else

 

8. { 
9. echo

"您尚未登录!"

10. } 
11. ?> 

当 register_globals=On 时,我们提交

http://www.sectop.com/ex2.php?

_SESSION[username]=dodo

就具有了此用户的权限所以不管 register_globals 为什么,我们都要

记住,对于任何传输的数据要经过仔细验证,变量要初始化。