PHP 全局变量 与 SESSION 漏洞(global 与 session)

http://blog.csdn.net/tom_green/article/details/6828061

PHP 全局变量 与 SESSION 漏洞(global 与 session)  


标签: sessionphpvariablesimport测试  

2011-10-18 14:43 2012人阅读 评论(0) 收藏 举报 


 .
先看这一段简单的代码
<?php
 session_start();$_SESSION['isadmin']='yes';$isadmin='no';echo $_SESSION['isadmin'];?>
当php.ini里配置 register_globals = Off 时,
 没任何问题,
 输出 yes但是
 当php.ini里配置 register_globals = On 的时候,
 第一次运行输出 yes
而刷新一下,则显示的是 no显然这是不正常的,
 这是个很奇怪的问题,
 如果说是 $isadmin='no'; 改变了SESSION,
 那么为什么第一次会显示yes呢?都知道:当配置 register_globals = On 的时候,
 通过 xxx.php?id=123 访问时,程序会自动创建变量 id
那么自动创建的变量会不会改变SESSION呢?
 测试代码
<?php
 //xxx.php
 session_start();
 echo $_SESSION['id'];
 ?>
通过 xxx.php?id=123 访问,没任何输出,
 还好,不然不知道将有多少
 采用 SESSION 做登录的
 而PHP配置 register_globals 为 On 的网站
 将被随便登录。还有两个常用的函数 import_request_variables() 和 extract()
 import_request_variables -- 将 GET/POST/Cookie 变量导入到全局作用域中
extract --  从数组中将变量导入到当前的符号表
<?php
 //xxx.phpimport_request_variables('G');
 echo $id;?>
当通过xxx.php?id=123访问的时候,
 就算 register_globals 设为 Off
也是会输出123extract($_GET) 与 import_request_variables('G') 功能相似那么试试import_request_variables() 与 extract()创建的变量会不会影响SESSION呢?
 测试代码
<?php
 //xxx.php
 session_start();import_request_variables('G');echo $_SESSION['id'];
 ?>
当通过xxx.php?id=123访问程序,
 没有输出,再用extract($_GET)代替import_request_variables('G')测试,
 还是没输出,这一点又很奇怪了,因为测试
<?php
 session_start();
 $arr=array('id'=>123);
 extract($arr);
 echo $_SESSION['id'];
 ?>
 register_globals 为 On 时
 会输出 123看来同样是数组,
extract 处理 $_GET 与处理定义的数组
 用的是不一样的方法。结论:
register_globals 为 On 的时候,
 用import_request_variables('G')和extract($_GET)创建的变量是不会改变SESSION的。总结:漏洞只存在于PHP配置register_globals = On的时候,定义的变量会改变同名的SESSION。

 
 •上一篇php全面获取url地址栏及各种参数
•下一篇php将网页导出word文档

 

posted @ 2017-06-21 09:16  sky20080101  阅读(95)  评论(0)    收藏  举报