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?
,就具有了此用户的权限所以不管 register_globals 为什么,我们都要
记住,对于任何传输的数据要经过仔细验证,变量要初始化。