Yii2框架之Cookie加密篇

cookie在发送到客户端之前如果不经任何加密,会很容易被伪造,下面我们来简单介绍下Yii2框架是怎么对cookie进行加密的。

$cookie = new yii\web\Cookie([
    'name' => 'username',
    'value' => 'test',
]);
Yii::$app->response->getCookies()->add($cookie);

首先,我们new一个新的Cookie对象

$serial = serialize([$cookie->name, $cookie->value]);

接着,Yii2会把$cookie对象按照上面的方式进行序列化

$value = Yii::$app->getSecurity()->hashData($serial, $validationKey);

接着,Yii2会把序列化好之后的$serial做一次哈希,其中,$validateionKey是用来做哈希的key,在配置文件中可以设置。hashData()这个方法会把生成的哈希值$hash$serial拼接起来,然后返回。生成哈希值的方法使用了hash_hmac()这个函数,根据不同的哈希算法,哈希值的长度可能会不一样,比如默认的sha256算法就是64位的,我们可以根据这个原理将$hash$serial拆开,然后来验证cookie的合法性。

最后,上面的$value将会作为cookie的新值发送给客户端。

知道了cookie是怎么加密的,那么也很容易知道怎么去验证cookie的合法性了,由于cookie加密后的值是由$hash$serial直接拼接而成的,那么我们只要根据“不同算法生成的哈希值长度不一样”这个原理,把$hash$serial提取出来,然后使用相同的$validationKey$serial做哈希,然后和$hash的值作比较看是否相等,如果相等的话,那么就证明这个cookie是合法的了。

PS:上面所有的代码都是经过简化的,具体的代码大家可以在yii\web\Responseyii\web\Requestyii\base\Security里面找到,涉及到的方法有Response::sendCookies()Security::hashData()Request::loadCookies()Security::validateData()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值