来源:自学PHP网 时间:2015-04-17 11:59 作者: 阅读:次
[导读] 首先来看php官方手册对于$_SERVER[#39;PATH_INFO#39;]的注解:该值为客户端提交的任意路径信息,取值为在实际脚本名称之后并且在查询字符串之前,例如假设当前url为http://www.2cto.com /php/pat...
首先来看php官方手册对于$_SERVER['PATH_INFO']的注解:
该值为客户端提交的任意路径信息,取值为在实际脚本名称之后并且在查询字符串之前,例如假设当前url为http://www.2cto.com /php/path_info.php/some/stuff?foo=bar,那么$_SERVER['PATH_INFO']取值为/some/stuff
接下来再看如下这段代码:test.php
<?php
session_start();
var_dump($_SESSION['test']);
echo'<br />';
$_SESSION['test']=$_SERVER['PATH_INFO']; var_dump($_SESSION['test']);
?>
<img src="notice"/> 访问url:http://localhost/test.php/a
返回页面:
Notice: A session had already been started - ignoring session_start() in D:\Apacheroot\test\test.php on line 2 Notice: Undefined index: test in D:\Apacheroot\test\test.php on line 3 NULL
string(2) "/b"
刷新后返回:
Notice: A session had already been started - ignoring session_start() in D:\Apacheroot\test\test.php on line 2 string(7) "/notice"
string(2) "/b"
发现什么奇怪的地方吗?
刷新后var_dump($_SESSION['test'])返回的是/notice,和img标签的地址一样,为什么会这样呢?
原因就在于<img src="notice"/>浏览器访问加载了/test.php/notice,这时触发了test.php,导致$_SERVER['PATH_INFO']变量改变,也就导致session变量改变,所以每当刷新页面,$_SESSION['test']输出的都是notice。
那么这样会导致什么安全隐患呢?
img标签中的地址任意内容都可以输出到网页中去,并在session内有效,也就是形成了天然的(反射+存储+dom型)XSS/CSRF,因为绝大多数安全防护类软件只扫描webshell,一句话木马等内容,并不扫描js脚本内容,所以可以免杀,其他危害还可以随环境而定
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com