惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

Airing 的博客

月刊(第34期):创造的快乐 2015-2016 随笔选集 2025,全新旅途 月刊(第33期):推理阶梯 月刊(第32期):中大校友会的采访 月刊(第31期):基于 Claude 的阅读流 月刊(第30期):写在 30 岁这天 游戏组件的一生: 从加载到上屏 月刊(第29期):新生活 2024,告别盛夏 月刊(第28期):AI 没有体验世界的能力 AI 心理疗愈应用的探索与实现 Mac 小众软件推荐与工作流分享(2024) 月刊(第27期):旅居 再见了,盛夏 Airing 开通了一个咨询服务 月刊(第26期):旅途 个人工具箱与好物分享 月刊(第25期):爱具体的人 2023,逃离仿徨 月刊(第24期):十年编程之路 月刊(第23期):多任务中的时间管理 月刊(第22期):当下的快乐 月刊(第21期):快节奏时代下的短视频 月刊(第20期):重启人生 月刊(第19期):日记的意义 大厂自研跨端框架技术揭秘 月刊(第18期):逃离社交网络 2022,平安喜乐 月刊(第17期):心之所向,素履以往 月刊(第16期):个人信息流分享 Chromium 渲染流水线——字节码到像素的一生 周刊(第13期):玄学杠杆与异世界小组 前端开发中的大小写敏感问题 周刊(第12期):前端三大浪漫 周刊(第11期):筮法是如何进行的 周刊(第10期):那些我喜欢的游戏(第1辑) 周刊(第9期):高效率到高消耗的现象与反思 周刊(第8期):三幕剧与英雄旅程 周刊(第7期):即兴发言模型 周刊(第6期):沟通艺术中的知觉检核 周刊(第5期):我在 TME 工作的一天 周刊(第4期):个人博客演变史 周刊(第3期):花束般的恋爱 周刊(第2期):重拾失去的好奇心 周刊(第1期):开刊,为什么写周刊 引擎剖析:JS 中的字符串转数值 2021,自渡向前 谈谈存在的价值与人生体验 Flutter 产物分析与减包方案 Roam Research 最佳实践——知识管理与任务管理 如何有效沟通——从《齐物论》立场问题切入 Flutter 异常处理方案——灰度与降级 2020,追逐星火 《光·遇》之“禅” Flutter 核心原理与混合开发模式 Flutter 混合开发框架模式探索 Flutter Boost 混合开发实践与源码解析 2019,走走停停 React Hooks 源码解析(4):useEffect React Hooks 源码解析(3):useState React Hooks 源码解析(2): 组件逻辑复用与扩展 React Hooks 源码解析(1):类组件、函数组件、纯组件 WWDC19 游记 双生日记开发经验分享 前端安全 | HPP 的攻击举例与防范 前端安全 | CSRF 的攻击手段与防范 前端安全 | XSS 的攻击手段与防范 人工意识何以可能? 文献阅读与论文写作的方法之己见 2018,沉淀初心 「没有你,也很好。」 Web 模拟终端博客系统 在线学习资源智慧推送系统研究 再见了,我的大学 6 万部豆瓣电影数据分析 B 站 2000 万用户分析
前端安全 | XST 的攻击原理与防御
2019-04-09 · via Airing 的博客

XST 的攻击手段

XST 的全称是 Cross-Site Tracing,中文译作“跨站式追踪攻击”。具体而言,是客户端发 TRACE / TRACK 请求至服务器,如果服务器按照标准实现了 TRACE / TRACK 响应,则在 response body 里会返回此次请求的完整头信息。通过这种方式,客户端可以获取某些敏感的 header 字段,例如 httpOnly 的 Cookie 等。

可见 XST 的攻击原理非常之简单,借由 XST 攻击获取到 Cookie 信息或者其他敏感信息之后,攻击者可以利用这些信息再发动 XSS、CSRF、中间人攻击等,看似无害,但潜在的危险却很巨大。仅根据 XST 攻击并不会对服务器造成实质性的伤害,它真实的影响是暴露了敏感的 header 数据,如拥有 httpOnly 属性的 Cookie,已经禁止前端 JavaScript 访问它(如 document.cookie),防止它被发送给第三方,但即使在这种情况下,TRACE 方法也可用于绕过此保护并访问 cookie。因此 XST 也被称作 Trace 泄露攻击、Trace header 反射、Trace 方法注入(TMI)、Trace Header Cookie 攻击(THC)。

XST 攻击的条件:

  1. 需要目标 Web 服务器允许接受 Trace、Track 方法的请求
  2. 客户端可以发送 Trace、Track 方法的请求。(如今浏览器环境下已经杜绝这种请求)

下面举个栗子,这里我用 Express 搭建了一个简单的 Web 服务器,接受一个 Trace 方法的请求:

import express from 'express'
import cookieParser from 'cookie-parser'

const app = express()

app.use(cookieParser())

app.use('/', (req, res, next) => {
  
  res.cookie('account', 'airing', { maxAge: 900000, httpOnly: true })

  return res.json(req.headers)
})

app.listen(3000)

我们用 TRACE 方法携带 Cookie 请求,可以发现 Cookie 是可以被发送过去的(Chrome 24 环境下):

var xhr = new XMLHttpRequest();
xhr.open('TRACE', 'http://127.0.0.1:3000/', false);
xhr.withCredentials = true
xhr.setRequestHeader('Cookie', 'account=airingursb');
xhr.send(null);
if(200 == xhr.status) console.log(xhr.responseText);

XST 的真正结果是它暴露了 JavaScript 通常无法访问的 HTTP 头,httpOnly 本应该阻止 JavaScript 读取与发送 cookie 到服务器,但 XST 成功绕过了 httpOnly 的限制。另外,用于 HTTP Basic Auth 的 Authentication 头只是 Base64 编码的用户名和密码,不是 DOM 的一部分,理应也不能直接被 JavaScript 读取,但若使用 XST 也可以绕过。这些敏感信息只通过一个 Trace 请求却全都暴露了出来。

XST 的防御方法

杜绝 XST 非常简单,Web 服务器限制 Trace、Track 方法的请求即可。另如今, XMLHTTPRequest 已经杜绝了 Trace 与 Track 方法的请求(Chrome 25 版本及 FireFox 19 之后),如果尝试用 Trace / Track 方法请求,会抛出 SecurityError 异常,这也从根本上杜绝了 XST 攻击。

var xhr = new XMLHttpRequest();
xhr.open('TRACE', 'http://localhost:3000/', false);
xhr.send(null);
if(200 == xhr.status) console.log(xhr.responseText);

image.png

同时,在 FireFox 43 之后,Cookie 等不安全字段也被禁止携带在请求的 header 中发送。详见 Forbidden header name | MSD

虽说目前现代浏览器已经越来越安全,XST 也成为了历史,但其给我们 web 开发者也留下警示——代码编写时一定要注意安全性和严谨性。

参考资料