PHP Object Injection(PHP对象注入)

本文介绍了PHP对象注入的概念,通过实例展示了如何利用序列化和反序列化进行攻击,并强调了魔术方法`__sleep()`和`__wakeup()`在对象注入中的作用。文章指出,不要将用户生成的内容传递给`unserialize()`函数以防止注入风险,建议使用`json_decode()`作为替代。解决此问题的关键是避免在用户可控的数据上使用`unserialize()`。
摘要由CSDN通过智能技术生成

PHP Object Injection(PHP对象注入)

文:https://vagosec.org/2013/09/wordpress-php-object-injection/

最近做wechall的PHP遇到一个题,琢磨了好久才知道咋整,感觉wechall网站的题总是百度不到答案,真是有点蛋疼。好了进入正题。

那道题主要是考的序列化与反序列化。

1、魔术方法

这里我们先简单介绍一下php中的魔术方法(这里如果对于类、对象、方法不熟的先去学学吧),即Magic方法,php类可能会包含一些特殊的函数叫magic函数,magic函数命名是以符号__开头的,比如 __construct__destruct__toString__sleep__wakeup等等。这些函数都会在某些特殊时候被自动调用。
例如__construct()方法会在一个对象被创建时自动调用,对应的__destruct则会在一个对象被销毁时调用等等。

2、php对象的序列化与反序列化(serialize和unserialize)

php允许保存一个对象方便以后重用,这个过程被称为序列化,即serialize()函数,对应的反序列化就是unserialize()。
简单的说,序列化就是把PHP对象按照一定规则存成一个字符串,而反序列化就是把序列化之后的字符串恢复成一个PHP对象。
这里我们简单测试一下吧:

<?php
class test
{
   
    public $username = '';
    public $password = ''; 
}
$a = new test();
$a->username = 'serial';
$a->password = 'serial';
echo serialize($a);
?>

输出为:

O:4:"test"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值