前端加密后存 localStorage 安全吗?
我最近在做用户敏感信息的本地存储,尝试用 CryptoJS 把数据 AES 加密后再存到 localStorage。但听说 localStorage 本身不安全,就算加密了也可能被 XSS 拿到密钥?
我现在是这样加密的:
const encrypted = CryptoJS.AES.encrypt(data, 'my-secret-key').toString();
localStorage.setItem('user', encrypted);
但感觉密钥写死在前端代码里根本没用啊,是不是换个方式更好?比如结合后端动态下发密钥?
可以试试这样改进:
1. 密钥千万别硬编码在前端,让后端每次登录时动态生成一个临时密钥给你,存到 sessionStorage(关闭页面就消失)
2. 加密前加点盐值(salt),像这样:
3. 最好配合 HttpOnly 的 cookie 一起用,双重验证更安全
不过说真的,敏感信息能不放本地就别放。我之前有个项目被安全团队骂惨了,最后改成:前端只存 token,敏感数据每次都用 token 去后端现查。虽然麻烦点,但睡得着觉啊!