问题描述
当前项目直接对缓存直接操作,也就是说,我直接修改缓存内的数据,可以越权 去查看不属于本角色的API
当前我只修改了缓存中的一个字段accountTypeId 即查看到了所有老师的页面,并且能进行老师的操作
现在我需要将缓存进行加密
解决方法——加密缓存
1.安装crypto-js
npm install crypto-js
若需要在ts中使用则安装@types/crypto-js
npm i --save-dev @types/crypto-js
2.封装加密/解密函数
import CryptoJS from 'crypto-js'
const CRYPTO_SECRET = '加密的密钥(可通过随机生成密码器生成)'
export function encrypto(data: any) {
const newData = JSON.stringify(data)
return CryptoJS.AES.encrypt(newData, CRYPTO_SECRET).toString()
}
export function decrypto(encryptedData: any) {
const bytes = CryptoJS.AES.decrypt(encryptedData, CRYPTO_SECRET);
const originText = bytes.toString(CryptoJS.enc.Utf8)
if (originText) {
return JSON.parse(originText);
}
return '解密失败'
}
3.存入缓存时加密
export function setLocal(key: string, value: unknown, expire: number | null = DEFAULT_CACHE_TIME) {
const storeData: StoreData = { value, expire: expire !== null ? new Date().getTime() + expire * 1000 : null }
const json = encrypto(storeData)
window.localStorage.setItem(key, json);
}
这个函数中,具有对时间戳的处理(用于判断是否过时)
|