可通过代理 window.localStorage.setItem 实现无侵入式写入审计,支持日志记录、敏感键告警、自动序列化、类型标注、非法值拦截及可配置开关,兼容现有代码且零感知集成。

可以通过代理 window.localStorage 的原生方法,在不修改业务代码的前提下,实现对所有写操作(setItem)的集中拦截、记录与审计。关键在于保留原始行为的同时注入日志、权限校验或元数据标记逻辑。
重写 setItem 实现写入审计
覆盖 localStorage.setItem,在调用原生方法前记录时间、键名、值、调用栈等上下文信息:
- 使用
console.trace()或new Error().stack捕获调用位置,便于定位问题模块 - 对敏感键(如
token、user_info)打标并触发告警(如上报到监控平台) - 自动附加写入时间戳和来源标识(如
env=prod、page=/login),方便后续归因分析 - 可选:对值做轻量脱敏(如正则匹配手机号、身份证号后部分掩码)再落库,满足基础合规要求
统一处理多类型数据写入
原生 localStorage 只接受字符串,但业务常存对象、数组、布尔值。重写后可自动序列化,并在日志中明确标注类型:
- 判断
typeof value,若为对象/数组,用JSON.stringify(value)存储,并在审计日志中记为type: "object" - 若为布尔或数字,显式转为字符串并记录原始类型,避免读取时类型丢失引发隐性 bug
- 拒绝非法值(如
undefined、function),抛出带堆栈的警告,防止静默失败
支持可配置的审计开关与分级策略
避免审计逻辑污染生产环境性能,应提供运行时开关和策略分层:
- 通过全局变量(如
window.__STORAGE_AUDIT_ENABLED = true)控制是否启用审计,开发/测试环境默认开,生产环境按需开启 - 支持白名单机制:仅审计指定键前缀(如
audit_*、auth_*),减少冗余日志 - 可对接前端埋点 SDK,将审计事件作为自定义事件上报,纳入统一可观测体系
- 保留原始
setItem引用,允许临时绕过审计(如初始化阶段批量写入),用法:localStorage._raw.setItem(...)
兼容性与无感集成
确保重写不影响现有功能,且能被所有团队成员“零感知”使用:
- 在项目入口(如
main.js或polyfill.js)第一时间执行重写,早于任何业务模块加载 - 不修改
getItem、removeItem等其他方法,除非有对应审计需求;若需全链路追踪,可同步增强getItem记录读取行为 - 对
localStorage做只读代理封装,禁止直接赋值覆盖(如window.localStorage = {...}),防止绕过 - 提供简易 API 如
localStorage.auditLog()供 QA 或运维手动拉取最近 50 条审计记录,用于现场排查

















