PHP、Java、Python反序列化的区别

区别

PHP反序列化是开发者不能参与的,开发者调用serialize函数以后,序列化的数据就已经完成了,你得到的是一个完整的对象,并不能在序列化流里新增某一个内容,如果想插入新的内容,只有将其保存在一个属性中。也就是说PHP的序列化、反序列化是一个纯内部的过程,而其_sleep_wakeup魔术方法的目的就是在序列化、反序列化的前后执行一些操作。

Java反序列化的操作,很多是需要开发者深入参与的,可以发现大量的库会实现readObjectwriteObject方法,这和_sleep_wakeup很少使用是存在鲜明对比的。

Python反序列化和Java、php有个显著的区别,就是Python的反序列化过程实际上是在执行一个基于栈的虚拟机。我们可以栈上增、删对象,也可以执行一些指令,比如函数的执行等,甚至可以用这个虚拟机执行一个完整的应用程序。所以,Python的反序列化可以立即导致任意函数、命令执行漏洞,与需要gadget的php和java相比更加危险。

总结

从危害上来看,Python的反序列化危害是最大的。
从应用广度上来看,Java的反序列化是最常被用到的。
从反序列化的原理上来看,PHP和Java是类似又不尽相同的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值