suyumen
目前主要在学习web相关

php序列化与反序列化

2021-07-10 php常识
Word count: 317 | Reading time: 1min

序列化

将变量或对象转换成字符串的过程。

1
$my = serialize($Site);

反序列化

1
unserialize(string $my)

如果传入的字符串不可被反序列化,则会返回FALSE,并产生一个 E_NOTICE

魔术函数:

_construct():创建对象时初始化
_destruction():结束时销毁对象
_toString():对象被当作字符串时使用
_sleep():序列化对象之前调用
_wakeup():反序列化之前调用
_call():调用对象不存在时使用
_get():调用私有属性时使用
_set(): 给私有属性赋值时使用
_invoke():当尝试以调用函数的方式调用一个对象时使用(5.3.0)
如果类中同时定义了 __unserialize() 和 __wakeup() 两个魔术方法,则只有 __unserialize() 方法会生效,__wakeup() 方法会被忽略。(7.4.0)

CVE-2016-7124漏洞

当序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行

防范方法

严格控制unserialize函数的参数,坚持用户所输入的信息都是不可靠的原则。
对于unserialize后的变量内容进行检查,以确定内容没有被污染。


参考

1.PHP serialize()与unserialize():序列化与反序列化
2.php反序列化漏洞

Author: suyumen

Link: https://suyumen.github.io/2021/07/10/2021-07-10-php%E5%BA%8F%E5%88%97%E5%8C%96%E4%B8%8E%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
EIS-2019-EzPOP
NextPost >
php的类与对象
CATALOG
  1. 1. 序列化
  2. 2. 反序列化
  3. 3. 魔术函数:
  4. 4. CVE-2016-7124漏洞
  5. 5. 防范方法
    1. 5.1. 参考