前言

前端做了数据加密,里面是序列化以后的字符串,加密数据被修改以后会导致反序列化致命错误,可以先检查是否序列化数据再进行反序列化。

函数

/**
 * @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;
}
最后修改:2021 年 04 月 01 日
如果觉得我的文章对你有用,请随意赞赏