应避免在 localstorage 存储敏感信息,即使加密也无效;正确做法是改用 httponly+secure cookie 存储登录态,降低 localstorage 数据粒度,控制生命周期,并立即清理历史敏感键。

直接在 localStorage 里存敏感信息,哪怕加了密,也属于“把锁装在玻璃柜里”——看着有防护,实际形同虚设。
真正该做的不是琢磨怎么加密,而是避免让它出现在 localStorage 里。下面说清楚几个关键点:
加密不是解药,只是幻觉
前端加密(比如用 CryptoJS 或 Web Crypto API)确实能掩盖明文,但问题在于:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 密钥必然要出现在前端代码里,或通过接口获取——前者可被直接提取,后者若未做严格校验(如绑定设备、会话、时间窗口),攻击者照样复用
- XSS 一触发,脚本就能同时拿到加密数据 + 解密函数 + 密钥,当场解密
- 加密后的字符串仍留在
localStorage中,长期存在、跨标签共享、无过期机制,等于给攻击者留足时间
所以,加密本身不提升实质安全等级,反而容易让人误以为“已防护到位”。
比加密更重要的三件事
换地方存
登录态、token、用户身份凭证等,必须改用 HttpOnly + Secure Cookie。它由后端设置,JS 完全读不到,每次请求自动携带,由服务端校验并刷新。这是防 XSS 窃取的最有效手段。
降数据粒度localStorage 只该存:用户 ID、昵称、主题偏好、语言设置这类不参与身份核验、不涉及资金/隐私风险的信息。
手机号、身份证号、余额、地址等,一律不缓存;每次需要时调接口实时拉取,并确保响应不被浏览器缓存(加 Cache-Control: no-store)。
控生命周期
如果真有极短期、低敏感的临时数据(如表单草稿、页面状态),优先用 sessionStorage —— 关闭标签页即销毁。
实在要用 localStorage,务必配合主动清理:
- 登录态失效时立即
removeItem - 页面卸载前监听
beforeunload清除临时键 - 启动时扫描键名,匹配
'token'、'idcard'、'phone'等关键词自动删除
如果项目已经这么做了,怎么补救
- 立即停写新敏感数据到
localStorage - 在应用初始化阶段批量清理历史敏感键:
Object.keys(localStorage).forEach(key => { if (/(token|auth|idcard|phone|bank)/i.test(key)) { localStorage.removeItem(key); } }); - 把原存储逻辑替换成后端 API 调用,用短期有效的
access_token配合Authorization请求头传输 - 后端加强防护:CORS 白名单、CSRF Token、请求频率限制、敏感字段脱敏返回
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










