LocalStorage可安全存储不敏感业务数据,需通过白名单键名、类型校验、版本前缀、反序列化验证及内容脱敏等前端约束实现,严禁存储任何敏感信息。

LocalStorage 本身不安全,但可以安全地存不敏感的业务数据——关键不在存储机制,而在前端主动约束:只允许特定键、限定值类型、加校验逻辑、配合清除策略。
定义并锁定白名单键名
明确哪些数据允许缓存,比如主题模式、搜索历史、折叠状态等低风险信息。把键名写死为常量,并用 Object.freeze 防止运行时篡改:
- const CACHE_KEYS = Object.freeze({ themeMode: true, lastSearch: true, sidebarCollapsed: true });
- 所有读写操作前必须检查 key in CACHE_KEYS,不匹配就静默丢弃或报错
- 避免拼接键名(如
`user_${id}_prefs`),防止越权写入任意键
封装带校验的读写方法
不直接调用 localStorage.setItem 或 getItem,而是统一走自定义函数,控制输入输出结构:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 写入时校验值类型:只接受字符串、简单对象(不含函数/日期/正则)、数组,拒绝 undefined、null、Date 实例等
- 建议在键名中加入版本前缀,例如
"app_v2::themeMode",便于后续批量清理或迁移 - 读取后做反序列化校验:JSON.parse 后检查字段是否存在、类型是否匹配,失效或异常时返回 null 并自动清理该键
避开敏感数据红线
白名单 ≠ 允许存一切。即使键名合规,也要守住内容底线:
立即学习“Java免费学习笔记(深入)”;
- 绝不存 token、密码、手机号、身份证号、银行卡号、JWT 等任何认证或身份标识信息
- 用户信息只存脱敏字段(如昵称首字+星号、头像 URL),且确保这些字段本身不构成可识别个体的组合
- 优先选择 sessionStorage 存短期临时数据(如表单草稿),关页即清,降低泄露窗口
提供可控的清除与降级能力
白名单管理不是一劳永逸,需配套运维手段应对升级和异常:
- 暴露
clearWhitelist()方法,按白名单批量删除,而非localStorage.clear()连带误删其他应用数据 - 版本升级时,通过键名前缀识别旧数据(如
"app_v1::"),自动迁移或丢弃 - 捕获
QuotaExceededError或解析失败异常,降级为内存缓存(模块级变量),并提示用户清理浏览器数据

















