Gun's Blog

PHP反序列化基础

Word count: 392Reading time: 1 min
2019/08/21 Share

记计算机学院2019年暑期信息安全培训(一下内容在BXS Team 的基础上加上自己的理解整理,感谢培训的带牢)

一、PHP反序列化的基础:

1.serialization & deserialization
Serialization is a mechanism of converting the state of an object into a byte stream.
De-Serialization is the reverse process where the byte stream is used to recreate the actual object in memory.
This mechanism is used to persist the object.
php反序列化

Advantages of Serialization:

To save/persist state of an object
To travel an object across a network

php序列化

2.serialize() & unserialize()
序列化对象
php序列与反序列化
序列化输出

  • 在会话中存放对象
  • serialize() //Object → String
  • unserialize() //String → Object
    Points to remember
  • 类名、变量(√) 方法不参与序列化(×)
  • 反序列化前对象的类已定义
    序列化对于不同类型得到的字符串格式为:
  • string: s:size:value
  • Integer: i:value
  • Boolean: b:value(保存1或者0)
  • Null: N
  • Araay: a:size:{key definition;value definition;(repeated per element)}
  • Object: O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)}

3.Magic Methods
magic-function验证
magic-function验证
a.sleep():函数原型:public __sleep ( void ) : array
对象被序列化之前触发,返回需要被序列化存储的成员属性数组,删除不必要的属性。
b.wakeup():函数原型:_wakeup ( void ) : void
预先准备对象资源,返回void,常用于反序列化操作中重新建立数据库连接或执行其他初始化操作。
c.toString():函数原型:public __toString ( void ) : string
toString()方法用于一个类被当成字符串时应怎样回应。例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串,否则将发出一条 E_RECOVERABLE_ERROR 级别的致命错误。
Magic-function
列子
magic-function验证
magic-function实列
magic

4.Demo

CATALOG
  1. 1. 一、PHP反序列化的基础: