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

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

http://www.2cto.com/Article/201207/143312.html

2012-07-25 09:46:56      我来说两句      
收藏     我要投稿
先看这一段简单的代码
<?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'];
?>
www.2cto.com
当通过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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值