0、PHP 类的概念
类的概念:类是具有相同属性和操作的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和操作两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和操作说明两个主要部分。
(1)类的定义
——类的关键字定义使用class
——定义一个空类 class person{};
——定义一个有成员属性和操作的类
class person{
成员属性……
操作……
}
——定义一个不能被继承的类,使用final关键字
Final class Person{
成员属性……
操作……
}
——注意:final关键字不能用来修饰成员属性,只能修饰类和方法
1、前言
序列化:运用serialize()函数把复杂的数据类型压缩成一个字符串的形式。
反序列化:运用unseriasize()函数把一个被压缩后的字符串转化为PHP代码的形式。
2、反序列化漏洞
PHP类里面有许多魔法函数,如果代码中使用unserialize()函数,并且参数我们可以控制的话,我们就可以通过控制输入的参数执行我们想要的命令。
3、常用魔法函数
_tostring():当把一个类当作字符串使用时就会自动调用该方法
_invoke():当把一个类当作函数使用时,就会自动调用该方法
_construct:创建一个新的类时,自动调用该方法
_destruct:当一个类被销毁时自动调用该方法
_sleep():当调用serialize()函数时调用
注意:_sleep要返回一个数组
_wakeup():当调用unserialize()函数时调用
4、要点
碰到PHP反序列化的问题时,如果参数可控,我们要反方向去寻找,即先找到调用我们想要调用的函数或方法,然后给可控的参数赋恰当的值,逆向推理,最后得出序列化字符串。
网友评论