欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > CTF-WEB-PHP魔法函数

CTF-WEB-PHP魔法函数

2024/12/13 14:48:43 来源:https://blog.csdn.net/weixin_43869703/article/details/143229832  浏览:    关键词:CTF-WEB-PHP魔法函数

serialize() 和 __sleep()

serialize() 函数会首先检查是否存在一个魔术方法 __sleep.如果存在,__sleep()方法会先被调用, 然后才执行串行化(序列化)操作。这个功能可以用于清理对象,并返回一个包含对象中所有变量名称的数组

unserialize() 和 __wakeup()

unserialize()会检查是否存在一个__wakeup方法。如果存在,则会先调用 __wakeup()方法,预先准备对象数据。但是这个wakeup()是可以被绕过的,

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

eg:
$b = new Demo('fl4g.php');
echo serialize($b);         # 输出O:4:"Demo":1:{s:10:" Demo file";s:8:"fl4g.php";}# 把Demo后的属性数量修改一下就能跳过,这里+是为了绕过php的preg_match 检查(可选)$var = 'O:+4:"Demo":2:{s:10:" Demo file";s:8:"fl4g.php";}';或者C:4:"Demo":1:{s:10:" Demo file";s:8:"fl4g.php";}
O标识符代表对象类型,而C标识符代表类名类型。如果将O替换为C,则在反序列化时会将其解释为一个新的类名字符串,从而创建一个新的类而不是对象。因为这个新的类没有被序列化过,所以它没有任何属性或方法。这样一来,在反序列化时,__wakeup魔术方法就不会被自动调用。

__construct()

使用关键字new实例化对象时会自动调用构造方法

__destruct()

  • 析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。

  • 或者当php代码声明周期执行完毕结束后,会自动调用该方法。

  • 当对象被unset()后 ;系统会自动调用该方法。

  • 当对象被重新赋值后 ;系统会自动调用该方法。

call_user_func_array和call_user_func的区别

call_user_func接受一个函数名(字符串)作为第一个参数,后面可以跟随任意数量的参数,这些参数将被传递给回调函数

call_user_func_array以数组的形式接受参数,这使得它非常适合在你不确定回调函数需要多少个参数,或者参数是动态生成的场景下使用。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com