SESSION序列化机制

本文探讨了PHP中的session.serialize_handler的三种序列化方式,指出在不同方式间混用可能引发的安全问题。通过实验展示了当使用php_serialize序列化的数据在php引擎下反序列化时,由于'|'字符导致的解析错误,进而阐述了如何利用此特性进行潜在的代码执行攻击。文章以一个恶意构造的payload为例,说明了在序列化方式不匹配时,如何触发__wakeup方法,执行恶意代码。
摘要由CSDN通过智能技术生成

一、session.serialize_handler三种序列化方式

php_binary 键名的长度对应的ascii字符+键名+经过serialize()函数序列化后的值
php 键名+竖线(|)+经过serialize()函数处理过的值(默认)
php_serialize 经过serialize()函数处理过的值,会将键名和值当作一个数组序列化

可以通过这个函数来设置当前页面的序列化方式:ini_set('session.serialize_handler','php_serialize');

1.php:

 <?PHP
 	header("content-type:text/html;charset=utf-8");
	ini_set('session.serialize_handler','php');
	session_start();
	$_SESSION['user']='kiki';
	print_r($_SESSION);

session:user|s:4:"kiki";

2.php_serialize:

 <?PHP
 	header("content-type:text/html;charset=utf-8");
	ini_set('session.serialize_handler','php_serialize');
	session_start();
	$_SESSION['user']='kiki'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值