最近做公司的項目,要求實現(xiàn)在數(shù)據(jù)傳輸過程中進(jìn)行加密。本來準(zhǔn)備要用HTTPS進(jìn)行傳輸 。由于項目采用的是Vue.js框架员帮。結(jié)合http是無狀態(tài)的會話,需要把用戶的口令保存到本地导饲。歷史遺留原因捞高,并沒有把口令存儲到cookie中,保存在SessionStorage中渣锦。暴露了Token硝岗,很容易被其他人拿走Token實現(xiàn)跨站攻擊。
公司要求每次傳輸數(shù)據(jù)要隨機(jī)變化袋毙。不能暴露Token型檀。即使拿到Token也無法對網(wǎng)站進(jìn)行攻擊。F12不能看到傳輸?shù)拿魑臄?shù)據(jù)听盖。
所以結(jié)合后端 采用AES加密胀溺。
使用crypto.js 在axios 的transformRequest中對請求對象進(jìn)行Aes加密裂七。
此處需要注意,因為有些情況是不需要加密的仓坞,所以返回的data應(yīng)該為string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams中的一種背零。但是此處應(yīng)該要注意的是 string類型要用QueryString.stringify而不是JSON.Stringify否則會在請求的數(shù)據(jù)后面增加 一個'':';
對于服務(wù)器返回的數(shù)據(jù),要用JSON.parse解析而不是用querystring.parse解析无埃,否則解析的是簡單對象外加空格回車徙瓶。這是兩個坑。
下面貼上代碼:
頂部引入crypto-js