Imperva Incapsula
与 CapMonster Cloud

验证码解决方案、网站部署及测试。

Imperva Incapsula解决方案的定价

验证码
价格 (USD)
$ 2.00
1000 代币
接手一个已经部署 captcha 或其他防护的站点,却无法访问源代码?此时最关心的是使用了哪种方案、配置是否正确以及如何测试。

在本文中,我们尽量回答了所有关键问题。要开始解决问题,第一步是确定当前使用的是哪种防护系统。为此,您可以查看常见验证码与反机器人防护系统列表,其中提供了可视化示例和关键特征,帮助您快速判断自己正在使用哪一种方案。

如果您发现自己的网站使用的是 Imperva Incapsula,下一步就是更深入地了解它的特性和具体工作方式。在本文中,您还可以查看 Imperva Incapsula 的接入说明,以便彻底弄清它在您的网站上是如何运行的。这样一来,您不仅能更好地理解当前的防护机制,还可以更合理地规划后续的维护和支持。

什么是 Incapsula
什么是 Incapsula
Imperva Incapsula Web Protection 是一套基于云端的防护系统,用于保护网站和应用程序免受外部威胁。该系统使用遍布全球 CDN 服务器的安全反向代理(Reverse Proxy)和 Web 应用程序防火墙 (WAF)。网站流量会被引导至安全的 Imperva 服务器,从而实现对每个请求的检查并过滤恶意行为。

如何通过 CapMonster Cloud 解除 Incapsula 验证

在测试受 Imperva Incapsula 保护的页面时,通常需要确保防护功能正常工作,且系统能正确过滤可疑流量。

您可以手动检查网站上的防护工作情况:

  • 打开目标页面,确认 Incapsula 弹出了验证检查。
  • 尝试在不完成验证的情况下访问 — 网站应返回 405 错误或额外的挑战(Challenge)。
  • 通过验证后,访问应能无错打开。

为了自动化此类检查,可以使用像 CapMonster Cloud 这样的服务。

CapMonster 接收 Imperva 的挑战参数(例如 cookie _incap_、HTML 和脚本中的数据),在服务端进行处理,并返回现成的有效 Cookie,这些 Cookie 可以被填入浏览器或 HTTP 客户端中。

通过 CapMonster Cloud API 工作的一般流程:

创建任务创建任务
arrow
发送 API 请求发送 API 请求
arrow
获取结果获取结果
arrow
将 Incapsula Cookie 注入页面将 Incapsula Cookie 注入页面
arrow
使用现成库识别 Imperva Incapsula
CapMonster Cloud 服务提供了现成的库,方便在 PythonJavaScript (Node.js) 语言中使用。
Python
JavaScript
解决方案、获取参数和设置 Cookie
Node.js 示例,用于网页上验证码识别的完整周期。可能的方法:使用 HTTP 请求获取 HTML 和防护系统参数,发送响应并处理结果。或者使用自动化工具(例如 Playwright)— 打开页面,等待验证,通过 CapMonster Cloud 客户端发送参数,接收结果,将 Cookie 填入浏览器(测试时可以使用正确或错误的数据),然后查看结果。
// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium

import { chromium } from "playwright";
import { CapMonsterCloudClientFactory, ClientOptions, ImpervaRequest } from '@zennolab_com/capmonstercloud-client';

async function main() {
    // 1) 设置
    const TARGET_URL = "https://example.com";
    const API_KEY = "YOUR_CAPMONSTER_API_KEY";

    const proxy = {
        proxyType: "http",
        proxyAddress: "PROXY_IP",
        proxyPort: 8080,
        proxyLogin: "PROXY_USER",
        proxyPassword: "PROXY_PASS"
    };

    // 2) 打开网站并收集 Imperva Cookie
    const browser = await chromium.launch({
        headless: true,
        proxy: {
            server: `${proxy.proxyType}://${proxy.proxyAddress}:${proxy.proxyPort}`,
            username: proxy.proxyLogin,
            password: proxy.proxyPassword
        }
    });

    const page = await browser.newPage();
    await page.goto(TARGET_URL, { waitUntil: "networkidle" });

    const cookies = await page.context().cookies();
    const impervaCookiesString = cookies
        .filter(c => c.name.startsWith("visid_incap_") || c.name.startsWith("incap_ses_"))
        .map(c => `${c.name}=${c.value}`)
        .join("; ");

    console.log("来自当前页面的 Imperva Cookie:", impervaCookiesString);

    await browser.close();

    // 3) 解决 Imperva 挑战 (Challenge)
    const cmcClient = CapMonsterCloudClientFactory.Create(
        new ClientOptions({ clientKey: API_KEY })
    );

    const impervaRequest = new ImpervaRequest({
        websiteURL: TARGET_URL,
        userAgent: "USER_AGENT_STRING",
        metadata: {
            incapsulaScriptUrl: "_Incapsula_Resource?example_param",
            incapsulaCookies: impervaCookiesString
        },
        proxy
    });

    const result = await cmcClient.Solve(impervaRequest);
    console.log("解决方案:", result);

    // 4) 填入接收到的 Cookie
    const domain = new URL(TARGET_URL).hostname;
    const solutionCookiesObj = result.solution.domains[domain].cookies;

    const solutionCookies = Object.entries(solutionCookiesObj).map(([name, value]) => ({
        name,
        value,
        domain: ".your-domain",
        path: "/",
        secure: true,
        httpOnly: false
    }));

    // 5) 设置 Cookie 并打开页面
    const browser2 = await chromium.launch({
        headless: false,
        proxy: {
            server: `${proxy.proxyType}://${proxy.proxyAddress}:${proxy.proxyPort}`,
            username: proxy.proxyLogin,
            password: proxy.proxyPassword
        }
    });

    const context2 = await browser2.newContext();
    await context2.addCookies(solutionCookies);

    const page2 = await context2.newPage();
    const resp2 = await page2.goto(TARGET_URL, { waitUntil: "networkidle" });

    // 输出最终页面状态(可选)
    // console.log("设置 Cookie 后的最终页面状态:", resp2?.status());

    // …或最终截图
    // await page2.screenshot({ path: "final_page.png" });

    console.log("已应用 Imperva Cookie 加载页面。");
}

main().catch(console.error);

如何将 Imperva Incapsula 接入您的网站
为了自信地掌握网站上验证码的工作方式,理解其验证逻辑,重新接入或重新配置防护,我们建议您学习本节。其中描述了防护接入流程 — 这将帮助您快速了解所有细节。

1. 创建账户(请使用您的工作邮箱注册)并进入 Imperva Cloud Security Console。

2. 确认邮箱。登录后,您将进入控制面板(您可以在文档中了解更多关于 Security Console 的操作)。

3. 打开 Websites 部分并输入您网站的真实域名。

HowTo Connect image 1

Imperva 将自动:

  • 检测您的 DNS 提供商,
  • 检查 SSL,
  • 开始扫描 DNS 记录。

4. 配置 DNS 记录。如果 Imperva 显示以下步骤:

Point dev.mysite.com DNS records to Imperva

请执行以下操作:

  • 进入您的域名注册商或主机的 DNS 面板。
  • 创建或更新记录:


类型 (Type): CNAME
名称 (Name): dev (您正在接入的子域名)
值 (Value): <您的_imperva_host>.ng.impervadns.net

示例:

dev.mysite.com > CNAME > xivaxeo.ng.impervadns.net

可选:启用对 Non-SNI 客户端的支持

如果 Imperva 显示通知:

If you expect Non-SNI traffic…

这涉及过时的客户端和特定的集成。如果您的网站是标准的,可以跳过此步骤。

如果需要,请启用:

CDN > Delivery > Support Non-SNI clients

5. 等待 DNS 验证。Imperva 将激活防护和 SSL。

当 DNS 连接成功后,Imperva 将自动:

  • 部署 CDN,
  • 激活 WAF (Web 应用程序防火墙),
  • 创建 HTTPS 证书,
  • 开启 DDoS 和机器人防护。

6. 限制对服务器的直接访问(推荐)

为了确保流量仅通过 Imperva,您应该在服务器上:

  • 仅允许来自 Imperva IP 地址的访问,
  • 禁止直接连接(您自己的 IP 除外),

您可以在 Create Rules 部分了解更多详情。

7. 检查网站运行情况。激活后

  • 在浏览器中打开您的子域名/域名,
  • 或使用 curl:

curl -I https://dev.mysite.com

请求头中应出现类似以下的行:


HTTP/1.1 403 Forbidden
Content-Type: text/html
Cache-Control: no-cache, no-store
Connection: close
Content-Length: 1234
X-Iinfo: 00-00000000-0 0NNN RT(1234567890 0) q(0 -1 -1 1) r(0 -1) B16(0,0,0) U24
Strict-Transport-Security: max-age=31536000
Set-Cookie: visid_incap_00000000000000000000000000000000=ABCDEFG1234567890TESTCOOKIE; expires=Wed, 11 Nov 2026 23:41:40 GMT; HttpOnly; path=/; Domain=.example.com; Secure; SameSite=None
Set-Cookie: incap_ses_0000_00000000=TESTSESSION1234567890; path=/; Domain=.example.com; Secure; SameSite=None

这意味着流量正在通过 Imperva。

Background
可能的错误与调试
Bug Icon
无效的域名或规则 — Challenge 未显示。
请检查 Security Rule(安全规则)是否绑定到了正确的域名和路径,并确保与 IncapRules 或 ACL 没有冲突。
Bug Icon
页面加载或验证超时。
浏览器可能未等到 Imperva 的响应。请增加测试中的超时时间 (timeouts),并确保后端响应速度足够快。
Bug Icon
Imperva Cookie 已过期。
过时的 visid_incap, incap_ses, nlbi 会导致重复的 Challenge 或被拦截。
Bug Icon
规则过于敏感。
严格的特征码(signatures)可能会拦截您网站的真实访问者。
Bug Icon
配置错误。
不考虑网站特性的错误设置或规则会导致错误的拦截和误报 (false positives)。
验证防护的可靠性
集成完成后,务必确认系统确实能够抵御自动化行为。
安全与优化建议
根据风险等级配置 WAF 和安全策略 (Security Policies)。使用托管规则 (Managed Rules)、机器人防护 (Bot Protection) 和自定义规则进行更精确的控制。
记录安全事件和 WAF 触发情况,以识别误报并分析拦截原因。
为了保持透明度,请添加指向<span class="font-bold">隐私政策</span>和<span class="font-bold">使用条款</span>的链接。这对于透明度和遵守安全要求非常重要。
结论

如果你接手了一个已经集成了验证码或其他防护系统的网站,但又无法访问其代码,也不用担心!要判断实际使用了哪种技术其实并不难。为了核实其是否正常工作,你可以在隔离的测试环境中使用CapMonster Cloud识别服务,确保令牌处理机制和校验逻辑都运行正常。

对于Imperva Incapsula,只需识别出所用的系统,观察其行为,并确认防护是否正常工作即可。本文演示了如何识别 Imperva Incapsula,以及到哪里查找其接入或重新配置的说明文档,从而帮助你自信地维护防护方案并掌控其运行情况。

Conclusion
实用链接
DocIconImperva Incapsula 文档DocIcon登录 Cloud Security ConsoleDocIconCapMonster Cloud 文档(与 Imperva Incapsula 协作)

关于 Imperva Incapsula 的常见问题

官方 JavaScript 和 Python SDK 库可简化集成,无需手动处理底层 API 轮询。

其一般逻辑包括以下步骤:

  1. 创建带有 websiteURLmetadata 对象的 ImpervaRequest。该 metadata 必须包含:
    • incapsulaScriptUrl — Incapsula JS 文件名。
    • incapsulaCookies — 来自 Incapsula 的 cookies。可通过页面上的 document.cookie 或请求头 Set-Cookie: "incap_ses_=...; visid_incap_=..." 获取
    • reese84UrlEndpoint(可选)— 发送 reese84 fingerprint 的 endpoint 名称;可在请求中找到,以 ?d=site.com 结尾
  2. 对于 JavaScript/Node.js 客户端,使用 Solve() 等待就绪的解决方案。
  3. 返回的解决方案包含有效的 cookies。

Python 遵循相同的整体 workflow。

  1. 创建 Imperva 账户
  2. 打开 Cloud Security Console
  3. 在 Websites 部分添加您的网站

Imperva 随后提供应使用的 DNS 目标,通常为您正在连接的子域名的 CNAME。

DNS 连接验证后,Imperva 激活 CDN/WAF 层,并在将请求转发到您的 origin 之前通过其基础设施路由流量。

要确认设置,请完成仅包含 header 的请求,例如 curl -I https://dev.mysite.com

如果流量正确通过 Imperva,示例响应包含 403 ForbiddenSet-Cookie header,如 visid_incap_*incap_ses_*

大多数 Imperva Incapsula 集成错误由 proxy、cookies、timing 或 rule 配置问题引起。请先检查这些:

  • Error 16: 您的 proxy 地理位置与所需区域不匹配。请使用来自正确国家或区域的 proxy。
  • 无效 domain 或 rule 配置: 验证目标 domain、WAF rule 绑定和集成设置。
  • 验证 timeout: 某些 challenge 参数很快过期,因此请收集最新的页面数据并立即提交。
  • Imperva cookies 过期: 在重试请求之前刷新 cookies。
  • Proxy 或浏览器不匹配: 使用您自己的 proxy 并为任务发送当前 Windows browser userAgent。
  • 重复检查或验证失败: 在假设 payload 错误之前,请检查 cookies、proxy 区域、rule 敏感度和 timeout 设置。

动态参数 visid_incap_*incap_ses_* 生命周期较短。使用过期 cookies 会导致 Imperva 发出重复 challenge 或直接阻止请求。解决方法是重新从页面收集最新 cookies,并立即向 CapMonster Cloud 提交新任务,在 metadata 对象中更新 incapsulaCookies

Imperva Incapsula 被描述为基于 cloud 的保护层,使用安全的 reverse proxies 和部署在 CDN 基础设施上的 Web Application Firewall。

在该模型中,网站流量通过 Imperva 服务器路由,请求可在流量到达 origin 之前被检查,恶意活动可被过滤。

为使该架构有效,我们还建议限制对服务器的直接访问,并在适当情况下仅允许来自 Imperva IP 范围的流量。