PHP反序列化漏洞之反序列化概念

1、反序列化的概念

        1、session传参

        2、反序列化时对应类的作用

        3、反序列和类中属性的值的关系

将序列化后的字符串转换回对象或者数组。

在PHP中使用unserialize()函数来将序列化后的字符串转换回PHP的值,并返回的值可为 integer、float、string、array 或 object类型。

我们下面的例子把序列化的结果写入一个文本中存储 :

a;
    }
}
$a = new test();
$b =serialize($a);
print_r($b);            // 输出序列化后的字符串
echo PHP_EOL;
echo PHP_EOL;
echo urlencode($b);           //输出url编码后的字符串
?>

输出结果为:

序列化:"O:4:"test":3:{s:1:"a";s:6:"dasuan";s:4:" * b";i:666;s:7:" test c";b:0;}"


url编码后的:O%3A4%3A%22test%22%3A3%3A%7Bs%3A1%3A%22a%22%3Bs%3A6%3A%22dasuan%22%3Bs%3A4%3A%22%00%2A%00b%22%3Bi%3A666%3Bs%3A7%3A%22%00test%00c%22%3Bb%3A0%3B%7D

我们重新写一个文件,读取刚才存储的文本内容并对内容进行反序列化:

输出:

__PHP_Incomplete_Class Object
(
    [__PHP_Incomplete_Class_Name] => test
    [a] => dasuan
    [b:protected] => 666
    [c:test:private] => 
)

为什么要序列化对象成字符串呢?在开发中又起到什么作用?

序列化作用:方便传输、方便存储。

因为PHP文件执行后会把内存的数据进行销毁,如果下一个文件想用到刚刚销毁对象的属性和值就还要重新实例化new一次对象,所以才会将对象进行序列化然后存储,也避免重新实例化带来的耗费。开发中比较好举例就是session,PHP中如果使用php_serialize引擎,那么存储session文件将以序列化的方式存储在文件中,当我们要验证当前用户是否有权限进入该页面时就需要反序列化读取存储在服务器上面的session文件的值来判断。

你可能感兴趣的:(PHP反序列化,安全,php,安全)