当前位置: 首页 > news >正文

不止于Cookie:手把手教你用Fiddler Hook住任意Header与AJAX请求(附常用代码片段)

不止于Cookie:手把手教你用Fiddler Hook住任意Header与AJAX请求(附常用代码片段)

在Web开发与安全测试领域,精准拦截和修改HTTP请求的能力往往能决定效率的边界。当传统开发者工具仅能被动查看网络请求时,Hook技术如同手术刀般切入请求生命周期,实现从观察到操控的质变。本文将聚焦Fiddler+JavaScript Hook组合技,突破常规抓包工具的限制,直击AuthorizationX-CSRF-Token等关键Header的拦截篡改,以及AJAX请求的全链路监控。

1. Hook技术核心原理解析

Hook的本质是运行时劫持——在目标函数执行前后插入自定义逻辑。浏览器环境中,所有HTTP请求最终都会转化为XMLHttpRequestfetch的调用,这为Hook提供了统一的切入点。

1.1 两种主流Hook实现方式对比

方法一:原型链重写(推荐用于Header拦截)
// 拦截setRequestHeader方法示例 const originalSetHeader = XMLHttpRequest.prototype.setRequestHeader; XMLHttpRequest.prototype.setRequestHeader = function(key, value) { if (key.toLowerCase() === 'authorization') { console.log(`[Hook] 捕获到Auth头: ${value}`); value = value.replace('Bearer', 'Hooked'); // 篡改Token } return originalSetHeader.apply(this, [key, value]); };

优势

  • 兼容性好(支持IE9+)
  • 可捕获动态生成的Header
  • 实时修改请求参数
方法二:Object.defineProperty(适合Cookie操作)
let cookieCache = ''; Object.defineProperty(document, 'cookie', { set: function(val) { if (val.includes('sessionid')) { console.log(`[Hook] 敏感Cookie设置: ${val}`); val = val + '; Secure'; // 自动添加安全标记 } cookieCache = val; return val; }, get: function() { return cookieCache; } });

适用场景

  • 需要监听属性读写双向操作
  • 精细控制属性描述符(configurable/writable)

1.2 关键技术点拆解

技术指标原型链重写defineProperty
触发时机方法调用时属性读写时
性能影响较低中等(需代理getter/setter)
调试友好度调用栈清晰可能打断点困难
典型应用Header修改、AJAX拦截Cookie监控、DOM属性Hook

实战提示:现代网站常使用fetchAPI,需额外Hook:

const originalFetch = window.fetch; window.fetch = async function(...args) { const [input, init] = args; if (init?.headers?.get('X-Secret')) { console.log('[Hook] 捕获到秘密Header'); } return originalFetch.apply(this, args); };

2. Fiddler自动化Hook工作流搭建

2.1 环境配置四步法

  1. 安装Fiddler Classic(≥v5.0)

    • 启用HTTPS解密(Tools > Options > HTTPS)
    • 配置根证书信任
  2. 注入Hook脚本

    • 使用FiddlerScript(Rules > Customize Rules)
    static function OnBeforeRequest(oSession: Session) { if (oSession.uriContains("api.example.com")) { oSession.utilSetRequestBody( oSession.GetRequestBodyAsString() .Replace("original", "modified") ); } }
  3. 编程猫插件增强

    • 将JS Hook代码粘贴至插件窗口
    • 启用AutoResponder模拟异常响应
  4. 浏览器联动调试

    • 配置代理为127.0.0.1:8888
    • 配合Chrome DevTools的XHR/fetch Breakpoints

2.2 常见问题排错指南

  • Hook失效检查清单
    • 确认代码注入时机早于目标代码执行
    • 检查网站是否使用WebWorker隔离环境
    • 验证是否有CSP(Content Security Policy)限制
    • 尝试在DOMContentLoaded事件前注入脚本

3. 实战:OAuth2.0令牌拦截与篡改

以下演示如何捕获并修改Authorization: Bearer令牌:

(function() { const originalOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function(method, url) { this.addEventListener('readystatechange', function() { if (this.readyState === 4) { const authHeader = this.getResponseHeader('Authorization'); if (authHeader) { console.log(`[Hook] 刷新令牌: ${authHeader}`); // 可在此处将令牌转发至自己的服务器 } } }); return originalOpen.apply(this, arguments); }; })();

安全测试典型场景

  1. 令牌泄露检测(检查是否明文传输)
  2. 权限越权测试(修改user_id参数)
  3. 重放攻击模拟(重复使用过期令牌)

4. 高阶技巧:动态AJAX请求分析

针对单页应用(SPA)的异步请求监控方案:

4.1 请求/响应全链路Hook

const originalSend = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.send = function(body) { const startTime = Date.now(); this.addEventListener('load', function() { console.table({ URL: this.responseURL, Status: this.status, Duration: `${Date.now() - startTime}ms`, RequestSize: body?.length || 0, ResponseSize: this.responseText?.length || 0 }); }); return originalSend.call(this, body); };

4.2 可视化监控面板

将上述数据通过WebSocket实时推送至监控界面,使用D3.js绘制:

  • 请求时序图
  • 异常状态码热力图
  • 数据传输量趋势分析

5. 防御对策:如何检测和防范Hook

作为开发者,可采用以下反Hook策略:

// 检测XMLHttpRequest是否被篡改 if (XMLHttpRequest.prototype.setRequestHeader.toString() .includes('[native code]') === false) { console.warn('XHR方法已被Hook!'); } // 冻结关键对象 Object.freeze(XMLHttpRequest.prototype); Object.defineProperty(document, 'cookie', { configurable: false, writable: false });

企业级防护建议

  • 使用WebAssembly实现敏感逻辑
  • 实施代码混淆(如Terser
  • 服务端校验请求参数签名
  • 定期更新CSP策略

在某个电商爬虫项目中,我们曾通过Hook动态生成的X-Signature请求头,发现其算法只是简单地对时间戳做MD5哈希。这种通过逆向工程获得的信息,最终帮助我们设计出更稳定的数据采集方案。

http://www.jsqmd.com/news/892759/

相关文章:

  • HANNA模型:融合机器学习与热力学的智能活度系数预测新范式
  • OHiFormer:基于结构相对位置编码的Transformer模型实现UI屏幕摘要
  • Unity中零依赖读取Excel:ExcelDataReader跨平台实战指南
  • 90%程序员拿10-15K,懂AI的已经年薪50万:四个阶段看清你差在哪儿
  • LSTM结合语义特征优化机器翻译:从序列建模到语义理解
  • 一文读懂天梭官方售后:网点布局、保养维修与服务流程 - 资讯速览
  • 原子尺度机器学习工程化:metatensor生态标准化模型开发与部署
  • ngx_http_request_handler
  • 网盘直链下载助手:八大网盘免费高速下载的终极解决方案
  • 用curl_cffi复刻浏览器可信链路突破AKM 3.0反爬
  • 近两年深圳劳动仲裁机构实力测评:技术效果口碑多维度对比 - 资讯速览
  • qLSTM-RvNN:引入二次连接增强递归神经网络语义组合能力
  • 企业内如何规范管理Taotoken的API Key与访问日志
  • 【学习笔记】《Python编程 从入门到实践》第3章:Python列表完全指南——创建、修改、删除与排序
  • 半监督图学习在金融反洗钱中的应用:从图嵌入到模型解释
  • 深圳劳动仲裁服务机构选择参考:多场景下的实操经验 - 资讯速览
  • 多语言仇恨言论检测:从词嵌入到Transformer的混合策略与实战
  • 从频域到电路:DCDC开关电源补偿网络的设计与实战调优
  • 非自伴边值问题的L-Fourier分析:从双正交系统到卷积与分布理论
  • 泰勒展开工程实践:函数近似与局部线性化的实时优化
  • 3分钟掌握跨平台资源下载:res-downloader让你的网络资源收集效率翻倍
  • 2026年6月最新万国官方售后服务中心全指南 | 精准工艺与尊享服务 - 资讯速览
  • LinkSwift网盘直链下载助手:3分钟实现9大网盘下载自由
  • 上海背调公司实测评测:合规性与效率核心维度对比 - 资讯纵览
  • 基于H型梁超表面与特征模分析的双频圆极化天线设计解析
  • 使用 Taotoken CLI 工具一键配置开发环境中的多工具 AI 密钥
  • 机器学习赋能分子动力学增强采样:从数据驱动CV到智能偏置与生成模型
  • 别再踩坑!泰州美甲易起翘 / 伤甲 / 流水线?15 年美业导师揭秘泰州美甲推荐攻略 - 资讯纵览
  • 向量空间JBoltAI v4.4:ReAct推理链走向全透明
  • 大一寸证件照怎么制作?2026大一寸尺寸标准+适用场景+手机教程 - 科技大爆炸