Laravel 5.5.42 版本后 ErrorException (E_WARNING) openssl_encrypt() 的问题

如果使用 Laravel 5.5 版本,执行 composer update 后出现ErrorException (E_WARNING) openssl_encrypt() 的问题:

ErrorException (E_WARNING)
openssl_encrypt() expects parameter 1 to be string, array given

一般原因是 Laravel 新版为了防止 PHP 对象的序列化/反序列化漏洞被利用,不再对 Cookie 值进行自动的序列化和反序列化处理。 参考 (Laravel 5.5 Upgrade Guide

解决方法

对于老项目,建议在中间件 App\Http\Middleware\EncryptCookies 设置开启 Cookie 值的自动序列化和反序列化处理参数 $serialize

class EncryptCookies extends Middleware
{
    protected static $serialize = true;

    /**
     * The names of the cookies that should not be encrypted.
     *
     * @var array
     */
    protected $except = [

    ];
}

新项目则建议将 Cookie 值使用 JSON 函数处理下,比如:

\Cookie::queue('user', json_encode(['name' => 'user1']));

为了安全,建议再执行一次 php artisan key:generate 重新生成 APP_KEY使之前加密数据失效。

小刘

纸上得来终觉浅,绝知此事要躬行

你可能也会喜欢...

发表评论

电子邮件地址不会被公开。 必填项已用*标注