前言

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

函数

/**
 * @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;
}

相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!