PHP 全局变量 与 SESSION 漏洞(global 与 session)
来源:互联网 发布:游族网络官网充值折扣 编辑:程序博客网 时间:2024/05/22 06:24
先看这一段简单的代码
<?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
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 全局变量 与 SESSION 漏洞(global 与 session)
- PHP全局变量与SESSION 漏洞(global 与 session)
- PHP全局变量与SESSION 漏洞(global 与 session)
- PHP 全局变量global与$GLOBAL大详解
- cookie与session(php)
- php cookie 与 session
- 【php】global的使用与php的全局变量
- php会话控制(session与cookie)
- PHP 会话控制(session与cookie)
- [PHP]全局变量:global与$GLOBALS的区别和使用
- [PHP]全局变量:global与$GLOBALS的区别和使用
- php中的全局变量$GLOBALS与global的区别
- PHP session 错误与解决
- PHP中的Cookie 与 Session
- PHP的session与cookie
- Session与PHP之session_start()
- PHP中的cookie与session
- PHP中SESSION与COOKIE
- Ubuntu 11.04搭建LAMP的简要过程
- ResultSet转换为List的方法 JSON MAP
- 黑马程序员__java_枚举
- android menu菜单的动态隐藏
- XXX 软件测试师 面试流程
- PHP 全局变量 与 SESSION 漏洞(global 与 session)
- 几种任务调度的 Java 实现方法与比较
- 动态规划 Interesting Tour hdu 3562
- XNA入门(四)纹理
- 确保ERP项目实施团队稳定之乙方问题解析
- 给 TextView 加上效果和事件响应
- opencv图像处理6--网球检测
- 和校验算法
- 我们是一群和平年代充满浮躁与抱怨的程序员