前言
前端做了数据加密,里面是序列化以后的字符串,加密数据被修改以后会导致反序列化致命错误,可以先检查是否序列化数据再进行反序列化。
函数
/**
* @param $data
* @return bool
*/
function is_serialized($data): bool
{
$data = trim($data);
if ('N;' === $data)
return true;
if (!preg_match('/^([adObis]):/', $data, $basins))
return false;
switch ($basins[1]) {
case 'a' :
case 'O' :
case 's' :
if (preg_match("/^{$basins[1]}:[0-9]+:.*[;}]\$/s", $data)) {
return true;
}
break;
case 'b' :
case 'i' :
case 'd' :
if (preg_match("/^{$basins[1]}:[0-9.E-]+;\$/", $data)) {
return true;
}
break;
}
return false;
}