igogo00 2020-05-03
https://www.bilibili.com/video/BV1Ft41187ZX
序列化与反序列化
php序列化与反序列化函数
serialize:可以将变量转换为字符串并且在转换中可以保存当前变量的值
unserialize:可以将serialize生成的字符串变换回变量
php进行序列化的目的是保存一个对象方便以后重用
类,变量,方法,对象
<?php //创建一个person类 class Person { //变量 public $name=‘‘; public $age=0; //方法 public function Information() { echo ‘Person: ‘.$this->name.‘is ‘.$this->age.‘years old <br/>‘; } } $per=new Person(); $per->name=‘lonmar‘; $per->age=18; $per->Information(); ?>
<?php class Person { public $name=‘‘; public $age=0; public function Information() { echo ‘Person: ‘.$this->name. ‘is ‘.$this->age.‘ years old <br/>‘; } } $per=new Person(); $per->name=‘lonmar‘; $per->age=18; echo serialize($per); ?> 输出: O:6:"Person":2:{s:4:"name";s:6:"lonmar";s:3:"age";i:18;}
<?php class Person { public $name=‘‘; public $age=0; public function Information() { echo ‘Person: ‘.$this->name. ‘is ‘.$this->age.‘ years old <br/>‘; } } $per=unserialize(‘O:6:"Person":2:{s:4:"name";s:6:"lonmar";s:3:"age";i:18;}‘); $per->Information() ?> 输出 Person: lonmaris 18 years old
php反序列化漏洞又称对象注入,可能会导致注入,远程代码执行等安全问题的发生。
php反序列化漏洞如何产生:
如果一个php代码中使用了unserialize函数去调用某一类, 该类中会自动执行一些自定义的magic method,这些magic method中如果包含了一些危险的操作, 或者这些magic method会去调用类中其他带有危险操作的函数,如果这些危险操作是我们可控的,那么就可以进行一些不可描述的操作 了。
<?php. if (!empty($_POST)) {. $data1 = $_POST["data1"];$data2 = $_POST["data2"];$fuhao = $_POST["fuh