sessionstorage 不该存任何敏感数据——因其无加密、无访问控制,xss 下可被任意脚本读取;禁止存储登录凭证、身份证号、手机号、密码、密钥、session_id、生物信息等;敏感态应由 httponly+secure+samesite cookie 托管;前端仅存脱敏用户id、主题偏好等非敏感标识;需通过封装函数和 eslint 拦截敏感键名写入。

SessionStorage 不该存敏感数据——这不是“怎么防”,而是“必须不存”。它本身没有加密、无访问控制、任何脚本都能读写,一旦页面存在 XSS 漏洞,攻击者一行代码就能拿走全部内容。
明确哪些属于敏感隐私数据
以下内容一律禁止写入 sessionStorage:
- 用户登录凭证(token、JWT、refresh token)
- 身份证号、手机号、银行卡号、真实姓名
- 密码、密钥、私有 API 密钥
- 会话标识(如 session_id)、临时授权码
- 含个人生物信息或健康记录的原始数据
用 HttpOnly Cookie 替代前端存储
真正需要持久化且服务端校验的敏感态(如登录态),应由后端通过 Set-Cookie 设置:
- 务必带上 HttpOnly(JS 无法读取)
- 加上 Secure(仅 HTTPS 传输)
- 设置 SameSite=Strict 或 Lax(防 CSRF)
- 合理设定 Max-Age(避免长期滞留)
前端只存非敏感上下文标识
如果业务确实需要“记住一点状态”,只存最小必要信息:
- 用户 ID(非主键,如脱敏后的 user-abc123)
- 主题偏好(theme: 'dark')、语言选择(lang: 'zh-CN')
- 编辑草稿的唯一标识(如 post-id-456),但不存草稿内容本身
- 表单步骤序号(step: 2),而非已填的手机号或地址
建立代码层硬性拦截机制
在项目入口或通用工具函数中加一层防护:
- 封装
safeSetSession(key, value),内置关键词黑名单(如 'token'、'pwd'、'idcard'、'phone') - 对 value 做基础正则检测(如匹配 11 位数字+连字符的手机号格式、JWT 结构等)
- 开发环境启用 console.warn 提示;生产环境可抛错或静默丢弃
- 配合 ESLint 插件(如 eslint-plugin-no-localstorage)拦截直接调用
sessionStorage.setItem
不复杂但容易忽略:SessionStorage 的设计初衷就是“临时、轻量、同页可见”,它的安全性边界非常窄。守住“不存敏感”这条线,比事后加密或混淆更有效、更可靠。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











