选择你喜欢的标签
我们会为你匹配适合你的网址导航

    确认 跳过

    跳过将删除所有初始化信息

    您的位置:0XUCN > 资讯 > 技术
    新闻分类

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

    技术 PRO 作者:chunxioo 2025-04-10 12:09

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

    为了应对这一挑战,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

    0XU.CN

    [超站]友情链接:

    四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
    关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/

    图库
    公众号 关注网络尖刀微信公众号
    随时掌握互联网精彩
    赞助链接