[WEB安全] php序列化和反序列化

序列化和反序列

  • 在各类语言中,将对象的状态信息转换为可存储或可传输的过程就是序列化,序列化的逆过程就是反序列化
  • 序列化和反序列化主要是为了方便对象的传输,通过文件或者网络将序列化的字符串进行传输,最终通过反序列化获取所传输的对象

PHP序列化和反序列化基本类型表达

  • 布尔型 b:value => b:0
  • 整数型 i:value => i:1
  • 字符串型 s:length:value => s:4 "aaaa"
  • 数组型 a:<length>:{key,value pairs} => a:1:{i:1;s:1:"a"}
  • 对象型 O:<class_name_length>
  • NULL型 N

示例代码

序列化

<?php
class man{
    public $name;
    public $age;
    public $height;

    function __construct($name,$age,$height){
        $this->name = $name;
        $this->age = $age;
        $this->height = $height;
    }
}
$man = new man("amy",18,50);
var_dump(serialize($man));
?>

反序列化

<?php
class man{
    public $name;
    public $age;
    public $height;

    function __construct($name,$age,$height){
        $this->name = $name;
        $this->age = $age;
        $this->height = $height;
    }
}
$man = 'O:3:"man":3:{s:4:"name";s:3:"amy";s:3:"age";i:18;s:6:"height";i:50;}';
var_dump(unserialize($man));
?>

 魔术方法

_construct():创建对象时初始化
_destruction():结束时销毁对象
_toString():对象被当作字符串时使用
_sleep():序列化对象之前调用
_wakeup():反序列化之前调用
_call():调用对象不存在时使用
_get():调用私有属性时使用

 反序列化利用

  • 魔术方法
  • 控制输入变量

 

 

[WEB安全] php序列化和反序列化:https://zy.xcstars.cn/193/
THE END
分享
二维码
< <上一篇
下一篇>>