PHP所有版本 SESSION

字体大小: 中小 标准 ->行高大小: 标准
关键字:php 漏洞 session register_globals 登录 安全

先看这一段简单的代码
<?php
session_start();

___FCKpd___0
SESSION['isadmin']='yes'; $isadmin='no'; echo
___FCKpd___0
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
___FCKpd___0
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(
___FCKpd___0
GET) 与 import_request_variables('G') 功能相似 那么试试import_request_variables() 与 extract()创建的变量会不会影响SESSION呢? 测试代码 <?php //xxx.php session_start(); import_request_variables('G'); echo
___FCKpd___0
SESSION['id']; ?> 当通过xxx.php?id=123访问程序, 没有输出,再用extract(
___FCKpd___0
GET)代替import_request_variables('G')测试, 还是没输出,这一点又很奇怪了,因为测试 <?php session_start(); $arr=array('id'=>123); extract($arr); echo
___FCKpd___0
SESSION['id']; ?> register_globals 为 On 时 会输出 123 看来同样是数组, extract 处理
___FCKpd___0
GET 与处理定义的数组 用的是不一样的方法。 结论: register_globals 为 On 的时候, 用import_request_variables('G')和extract(
___FCKpd___0
GET)创建的变量是不会改变SESSION的。 总结:漏洞只存在于PHP配置register_globals = On的时候,定义的变量会改变同名的SESSION。 转载请保留 作者:Cos.X 日期:2007年6月13日 ps. 结果让我挺失望的,以为会发现一个惊人的PHP SESSION 登录安全漏洞。 ---------------> register_global=on的时候它不是漏洞, 那么register_global=off的时候它就是漏洞了 那么register_global本来就是可以开可以关的, 哪有说关上了就不是漏洞了

此文章由 www.phpgz.com 收集整理 ,地址为: http://www.phpgz.com/htmls/67192.html

大屏阅读,大屏评论.