好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHP全局变量与SESSION 漏洞(global 与 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']; ?> HdhCmsTest2cto测试数据 当通过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) - 网站的详细内容...

  阅读:57次