session:惊人发现:PHP所有版本 SESSION 漏洞来源: 发布时间:星期二, 2008年11月18日 浏览:145次 评论:0
转载自:http://user.qzone.qq.com/47900026/blog/1193996479 惊人发现:PHP所有版本 SESSION 漏洞 惊人发现:PHP所有版本 SESSION 漏洞关键字:php 漏洞 session register_globals 登录 安全 先看这一段简单的代码 <?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.php import_request_variables('G'); echo $id; ?> 当通过xxx.php?id=123访问的时候, 就算 register_globals 设为 Off 也是会输出123 extract($_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。 转载请保留 作者:Cos.X 日期:2007年6月13日 ps. 结果让我挺失望的,以为会发现一个惊人的PHP SESSION 登录安全漏洞。 0
相关文章
读者评论发表评论 |
|