最后的var_dump($_SESSION);什么意思

来源:4-6 使用session

TravisTom

2016-07-08 20:03

不太懂最后一句具体什么意思
写回答 关注

2回答

  • SapereAudor
    2016-07-08 20:28:12

    首先来看php官方手册对于$_SERVER['PATH_INFO']的注解:

    该值为客户端提交的任意路径信息,取值为在实际脚本名称之后并且在查询字符串之前,例如假设当前url为 /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脚本内容,所以可以免杀,其他危害还可以随环境而定


  • mangixs3584506
    2016-07-08 20:28:01

    var_dump()方法是判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型.$_SESSION是用于存储和取回 session 变量,所以这句话的意思是判断session的类型和长度并输出session的数值

PHP进阶篇

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

181833 学习 · 2577 问题

查看课程

相似问题