0Pricing
HTML Academy · 课时

安全性:存储中绝不能保存什么

避免在 localStorage 中存储令牌或 PII

安全性:存储中绝不能保存什么 是 CoddyKit 上的免费 HTML Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 HTML Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 HTML Academy 课程共包含 4 节课。

存储内容是纯文本

localStorage 和 sessionStorage 会将未加密的数据保存在用户配置文件所在的磁盘上。任何具有文件系统访问权限的进程——包括恶意软件、备份工具或其他已登录用户——都能读取您存储的每个值,而无需通过浏览器。

任何脚本都可访问

源上运行的所有脚本共享同一个存储空间。成功的 XSS 攻击、遭到入侵的第三方 SDK 或恶意浏览器扩展都可以调用 localStorage.getItem,窃取并传出所有已存储的值。脚本之间没有隔离。

切勿存储身份验证令牌

请勿将会话令牌、JWT、刷新令牌或 API 密钥放入 localStorage。如果攻击者注入一行 JavaScript,令牌就会立即泄露。请使用带有 httpOnly、Secure、SameSite 属性的 Cookie,使令牌永远无法从 JavaScript 访问。

切勿存储密码

在客户端以任何形式存储密码——明文、哈希值或加密形式——都是错误的。仅在客户端进行哈希处理并不能解决问题,因为攻击者可以读取哈希值并重放它。密码处理应完全放在服务器上,并使用 bcrypt 等专用密码哈希算法。

切勿存储信用卡数据

PCI-DSS 禁止在客户端存储中保存卡号、卡片验证码、磁条数据或有效期。请改用令牌化支付服务提供商(Stripe、Braintree、Adyen),由其返回一个绑定到您源且有效期很短的令牌。

切勿存储个人身份信息

政府签发的身份证件号码、完整出生日期、家庭住址和医疗数据会引来监管机构(GDPR、HIPAA)和攻击者。仅存储当前会话所需的数据,需要时重新请求,并让服务器保留权威数据源。

XSS 会放大损害

泄露 document.cookie 的 XSS 漏洞已经很糟糕。如果同样的漏洞出现在使用 localStorage 存储令牌的页面上,攻击者就能一次性获取所有已存储的值。应将 localStorage 视为“攻破一个脚本就等于攻破一切”的攻击面。

加密也无法保护您

如果用于加密值的密钥也存在于 JavaScript 中,就无法提供真正的保护——能够读取密文的攻击者同样能够读取密钥。真正的机密必须留在服务端,需要时重新签发,绝不能持久化到客户端。

可以安全存储的数据

用户界面偏好(主题、侧边栏是否折叠、语言)、非敏感功能开关、表单草稿内容和临时向导状态都可以安全存储。它们本来就对用户可见,泄露也不会导致账户接管。

localStorage.setItem("theme", "dark");
localStorage.setItem("sidebar:collapsed", "true");
localStorage.setItem("draft:post-123", draftMarkdown);

使用 Cookie 进行身份验证

通过 Set-Cookie: token=...; HttpOnly; Secure; SameSite=Strict 设置身份验证信息。HttpOnly 标志会让 Cookie 对 JavaScript 不可访问,即使页面上还存在其他漏洞,也能抵消大多数窃取令牌的 XSS 载荷。

存储使用方面的缓解措施

如果必须缓存看似敏感的数据,请严格限制其作用域(TTL 较短、注销时清除、通过 sessionStorage 在标签页关闭时移除),应用严格的内容安全策略来阻止注入脚本,并审查每个在已验证页面上运行的第三方脚本。

知识检查

为什么将身份验证令牌存储在 localStorage 中会被视为安全风险?

总结

网页存储是明文、可被脚本读取,并在每个源内共享的存储机制。切勿在其中放置身份验证令牌、密码、支付数据或受监管的个人信息。请将机密保存在 httpOnly Cookie 中,并将 localStorage 留给无害的用户界面状态,也就是用户本来就能看到的内容。

常见问题解答

「安全性:存储中绝不能保存什么」课时是免费的吗?

是的 — 「安全性:存储中绝不能保存什么」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 HTML Academy 课程的其余内容,请升级到 CoddyKit PRO。 HTML Academy 课程共包含 4 节课。

「安全性:存储中绝不能保存什么」这节课中我会学到什么?

避免在 localStorage 中存储令牌或 PII 你通过在浏览器中直接运行的动手代码来练习 HTML Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 HTML Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 HTML Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「安全性:存储中绝不能保存什么」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 HTML Academy 课中编写并运行代码吗?

能。每节 HTML Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. localStorage 与 sessionStorage
  2. 获取、设置和移除项目
  3. 监听存储事件
  4. 安全性:存储中绝不能保存什么
← 返回 HTML Academy