Yii2框架之Cookie加密篇
阿新 • • 發佈:2019-02-16
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是合法的了。