HTML5 提供的 Web Storage 功能,确实为前端开发带来了极大的便利。开发者可在客户端本地存储各类数据,比如用户偏好设置、临时状态信息——LocalStorage 支持长期保存,容量通常为 5MB,远大于 Cookie 仅几 KB 的存储空间,且 API 调用十分简洁。然而,便利的背后也隐藏着显著的安全隐患,Web Storage 的安全风险不容忽视。
一、Web Storage 简介与功能
简而言之,HTML5 的 Web Storage 允许应用在客户端本地开辟存储空间,用于保存有用的数据。LocalStorage 持久化存储,空间通常达 5MB,有效解决了 Cookie 容量小、操作繁琐、易被清除等传统问题,极大地提升了客户端的灵活性。如今,许多开发人员习惯使用它来存储 token、用户资料乃至部分业务关键数据。
二、常见攻击方式
LocalStorage 的 API 全部通过 JavaScript 暴露,这为攻击者提供了可乘之机——一旦页面存在 XSS 漏洞,他们便能轻松遍历本地存储,窃取 token 或用户隐私信息。例如,攻击者可利用以下代码将 LocalStorage 中的全部数据提取出来:

此外,LocalStorage 并非唯一的信息泄露途径。目前不少开发者存在一个不良习惯:为了方便,将用户名、密码、邮箱等敏感信息直接存放到全局变量中。数据未置于合适的作用域,安全风险就会急剧增大。例如,下面这段脚本便能遍历全局变量获取相关信息:

三、攻击工具与手段
一个名为 HTML5dump 的工具,其定义非常直白:“JavaScript that dump all HTML5 local storage”。该工具能够导出 HTML5 SessionStorage、全局变量、LocalStorage 以及本地数据库存储,攻击者获取后即可直接利用。

四、防御之道与最佳实践
如何防御?核心原则其实只有两条:
1、将数据置于合适的作用域
例如,用户的 session ID 不应使用 LocalStorage 存储,改用 sessionStorage 更为安全。用户数据也切勿放在全局变量中,临时变量或局部变量才是正确选择。
2、避免存储敏感信息
因为你永远无法确保页面绝对安全——第三方脚本、XSS 漏洞防不胜防。因此,密码、支付信息、业务密钥等重要数据,切勿存入 Web Storage。
以上便是 Web Storage 攻击的详细解析。安全从来不是“加了就算完事”,只有深刻理解攻击方式,才能编写出更加稳健的代码。
