Anubis:基于工作量证明(PoW)的反爬机制解析

开源 作者:云助手 2025-04-10 12:09:37 阅读:28

随着互联网的迅猛发展,爬虫技术成为数据抓取的重要工具。然而,恶意爬虫的出现给网站带来了不少问题,例如数据泄露、服务器负载过高等。

为了应对这一挑战,Anubis 提出了基于 工作量证明(Proof-of-Work, PoW) 的创新反爬机制。

本文将详细解析 Anubis 的底层实现原理,并通过量化数据探讨其计算耗时。

1. Anubis 的核心思想

Anubis 的基本原理非常简单但高效:

• 计算任务: 访问者在访问网站前,必须完成一个计算密集型的哈希计算任务。

• 计算条件: 只有计算出符合特定条件的哈希值,才能继续访问网站。

• 爬虫难度: 由于计算过程需要 JavaScript 执行,传统的无头爬虫或 HTTP 客户端难以完成。

这一机制类似于比特币等区块链中的 PoW 机制,确保每次访问都需要消耗一定的计算资源,从而有效地提高恶意爬虫的抓取成本。

2. Anubis 的工作原理

2.1 反向代理拦截

Anubis 充当反向代理服务器,拦截并转发所有访问目标网站的请求。

工作流程如下:

  1.  拦截请求: 用户访问目标网站时,Anubis 服务器首先拦截请求,并返回一个包含 PoW 计算任务的 JavaScript 代码。

  2. 计算任务: 用户需要在浏览器中执行 JavaScript 来完成 PoW 任务。

  3. 验证计算: 一旦计算完成,浏览器将计算结果发送回 Anubis 服务器,服务器验证计算是否符合要求。

2.2 计算 PoW 任务

浏览器需要计算一个符合难度要求的 SHA-256 哈希值。

具体的计算过程如下:

function computePoW(prefix, difficulty) {    let nonce = 0;    while (true) {        let hash = sha256(prefix + nonce);        if (hash.startsWith('0'.repeat(difficulty))) {            return nonce;        }        nonce++;    }}

• prefix 是由服务器随机生成的,确保每次挑战唯一。

• difficulty 表示要求哈希值前若干位为 0(例如,前 5 位为 0)。

• 计算过程中,nonce 值需要经过多次迭代,直到找到满足条件的哈希值。

2.3 验证计算结果

计算完成后,浏览器将 nonce 返回给 Anubis 服务器。服务器验证 sha256(prefix + nonce) 是否符合难度要求。如果验证通过,Anubis 服务器设置 Cookie 允许用户访问目标网站。

2.4 维持访问状态

为了避免用户每次访问都重新计算,Anubis 服务器会在验证成功后返回一个短期有效的 Cookie。用户在 Cookie 有效期内,无需再次进行 PoW 计算,直接访问目标网站。

3. 反爬优势分析

Anubis 利用 PoW 机制对抗爬虫,具有以下优势:

  1.  显著增加爬虫成本: 传统爬虫通常是批量并发抓取,PoW 要求每个请求都进行计算,极大降低了爬取效率。

  2. 对普通用户影响较小: 计算任务仅在首次访问或 Cookie 过期后触发,普通用户可以快速完成计算,不影响正常体验。

  3. 有效对抗无头浏览器: 无头浏览器虽然能够执行 JavaScript,但 PoW 的计算仍消耗大量 CPU 资源。由于 PoW 计算是动态生成的,缓存无效,爬虫无法绕过挑战。

4. 量化 Anubis 计算耗时

要量化 Anubis 的计算耗时,可以从两个方面来衡量:

4.1 计算哈希的时间

每次计算 SHA-256 哈希时,根据挑战(challenge)和 nonce 进行迭代运算,直到满足特定条件。以下是模拟计算时间的代码示例:

const start = Date.now(); // 记录开始时间let nonce = 1;let challenge = "some_challenge_data"; // 这是请求中生成的挑战let validHash = false;while (!validHash) {const hash = awaitsha256(`${challenge}${nonce}`);  validHash = hash.startsWith("00000"); // 默认要求前5位为0  nonce++;}const end = Date.now(); // 记录结束时间const elapsedTime = end - start; // 计算耗时console.log(`哈希计算总耗时: ${elapsedTime} 毫秒`);

通过记录开始时间 start 和结束时间 end,可以计算出每次哈希计算所消耗的时间。这个耗时是计算效率的关键指标,反映了 PoW 任务的计算难度。

4.2 测量实际测试耗时

我们还可以通过模拟用户请求,记录整个过程的耗时,得到一个综合的性能数据。包括:

  1.  页面加载时间: 用户访问 Anubis 代理服务器后,页面加载的时间。

  2. 哈希计算时间: 执行 PoW 计算所需的时间。

  3. 请求完成时间: 用户通过验证后,重定向到目标网站的时间。

以下是模拟完整过程的代码示例:

<!DOCTYPE html><html lang="zh"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>PoW 计算测试</title>    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.2.0/crypto-js.min.js"></script><!-- 引入 sha256 库 --></head><body>    <h1>PoW 计算测试</h1>    <button onclick="startPoW()">开始计算</button>    <div class="output" id="output">        <p id="iterations">迭代次数:等待计算</p>        <p id="timeElapsed">耗时:等待计算</p>    </div>    <script>        asyncfunctionstartPoW() {            const startRequest = Date.now(); // 请求开始时间            // 假设计算过程是之前的步骤            let nonce = 1;            let challenge = "some_challenge_data"; // 这是请求中生成的挑战            let validHash = false;            let iterations = 0; // 记录迭代次数            // 计算 SHA256            while (!validHash) {                const hash = CryptoJS.SHA256(challenge + nonce).toString(CryptoJS.enc.Hex);                validHash = hash.startsWith("00000");                nonce++;                iterations++; // 每次循环增加迭代次数            }            const endRequest = Date.now(); // 请求结束时间            const requestElapsedTime = endRequest - startRequest;            // 更新 UI 输出            document.getElementById('iterations').textContent = `迭代次数:${iterations}`;            document.getElementById('timeElapsed').textContent = `耗时:${requestElapsedTime} 毫秒`;        }    </script></body></html>

通过测量完整请求的耗时,我们能够更全面地了解 Anubis 反爬机制的性能。

5. 结果对比与优化

通过多次测试,我们可以得出每次迭代的平均耗时以及总耗时。例如:

这些数据帮助我们量化 Anubis 的防止爬虫效果,并为网站管理员提供了依据,可以在不同难度条件下优化 PoW 计算,确保对爬虫的有效防护,同时保证正常用户的体验不受影响。

6. 结论

Anubis 通过 PoW 机制,将爬虫的计算成本大幅提高,极大地阻碍了恶意爬虫的抓取效率。而普通用户则几乎不会受到影响,确保了正常浏览体验。这种创新的防护方法在与传统反爬方式(如验证码、IP 限制等)相比,具有更强的适应性和防护能力。

通过量化计算耗时,站点管理员可以实时监控和调整 PoW 难度,优化防护策略,以实现更高效、更智能的反爬机制。

引用链接

[1] 源码下载 :https://pan.baidu.com/s/15DGvtSLSZLezFOJmg8jtTg?pwd=n6c8

赞助链接

Copyright © 2024 5xcloud.com All rights reserved.

蜀ICP备20006130号