zoukankan      html  css  js  c++  java
  • 关于_tostring[php]的另类利用

    收获

    反序列化tostring的考点不一定要考察调用一个Class,也可以使用echo来进行考察

    tostring()方法:在直接输出对象引用的时候,就不会产生错误,而是自动调用了__tostring()方法,输出__tostring()方法中返回的字符串

    通俗来说就是 对象一般是使用print_r() 或 var_dump() 来打印访问

    但对于一般闲的人来说直接 使用 echo 输出对象时,必定会报错的,原因是对象无法使用echo的。

    这个时候如果想解决这个错误,咱们应该怎么操作呢?

    可以很好的利用__tostring()这个魔术方法

    但是切记使用__toString() 时返回值一定要使用return 来进行返回。

    <?php
    
    class Flag{
        public $file;
        function __tostring(){
            if(isset($this->file)){
                echo $this->file;
            }
            return ' ';
        }
    }
    $y='O:4:"Flag":1:{s:4:"file";O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}}';
    $x='O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}';
    echo unserialize($x);
    echo unserialize($y);
    ?>
    
    
    flag.php flag.php  
    进程已结束,退出代码 0
    

    无报错,且返回都是flag.php

    <?php
    
    class Flag{
        public $file;
    }
    $y='O:4:"Flag":1:{s:4:"file";O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}}';
    $x='O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}';
    echo unserialize($x);
    echo unserialize($y);
    ?>
    

    报错,无法反序列化

  • 相关阅读:
    CSS之定位
    选择器小结
    ASP.NET Web API + Elasticsearch 6.x 快速做个全文搜索
    获取服务端https证书
    使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错
    MVC和WebForm的优缺点比较
    C#之VS开发工具快捷键大全
    Scrum敏捷开发之扫盲篇
    Asp.net 中数据量较小插入数据库
    xml解析
  • 原文地址:https://www.cnblogs.com/LLeaves/p/12884119.html
Copyright © 2011-2022 走看看