来源:自学PHP网 时间:2015-04-17 13:03 作者: 阅读:次
[导读] 先看这一段简单的代码?phpsession_start();$_SESSION[#39;isadmin#39;]=#39;yes#39;;$isadmin=#39;no#39;;echo $_SESSION[#39;isadmin#39;];?当php.ini里配置register_globals = Off 时,没任何问......
先看这一段简单的代码
<?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。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com