logo
bars

Imperva Incapsula
と CapMonster Cloud

キャプチャの解決、サイトへの導入、およびテスト。
キャプチャや防御機構が導入済みのサイトを引き継いだのに、ソースコードへアクセスできない? その場合、どの仕組みが入っているのか、設定は正しいのか、どう検証するのかが気になります。

この記事では、よくある疑問にできるだけお答えしました。まず最初のステップは、どのような保護システムが使われているかを特定することです。そのために、代表的なキャプチャやボット対策システムの一覧を参照できます。ここには、どの仕組みが使われているかを素早く見分けるための画面イメージや主な特徴がまとめられています。

もしサイトで Imperva Incapsula が使われていることが分かったら、次のステップはその特徴と動作をより詳しく確認することです。同じこの記事の中で、Imperva Incapsula をサイトに導入するための手順書も確認できるので、あなたのサイト上でどのように機能しているのかをしっかり理解できます。これにより、現在の保護を正しく把握できるだけでなく、今後の運用や保守も計画的に行えるようになります。

Incapsula とは
Incapsula とは
Imperva Incapsula Web Protection は、外部の脅威からWebサイトやアプリケーションを保護するためのクラウドベースのシステムです。このシステムは、世界中のCDNサーバーに配置された安全なリバースプロキシとWeb Application Firewall (WAF) を使用しています。サイトへのアクセスは保護された Imperva サーバーを経由するため、すべてのリクエストを検証し、悪意のある活動をフィルタリングすることが可能です。

CapMonster Cloud を使用して Incapsula を解決する方法

Imperva Incapsula で保護されたページをテストする際、保護が正しく機能しているか、システムが疑わしいトラフィックを適切にフィルタリングしているかを確認する必要がある場合がよくあります。

サイトの保護機能は手動で確認できます:

  • 目的のページを開き、Incapsula がチェック(検証)を表示することを確認します。
  • チェックを完了せずにアクセスしてみてください。サイトはエラー 405 または追加のチャレンジ(challenge)を返すはずです。
  • チェックに合格すると、エラーなしでアクセスできるようになります。

このようなチェックを自動化するには、CapMonster Cloud のようなサービスを使用できます。

CapMonster は Imperva のチャレンジパラメータ(例:_incap_ Cookie、HTML やスクリプトからのデータ)を受け取り、それらを処理して、ブラウザや HTTP クライアントに適用可能な有効な Cookie を返します。

CapMonster Cloud API を使った一般的な手順:

タスクの作成タスクの作成
arrow
API リクエストの送信API リクエストの送信
arrow
結果の受信結果の受信
arrow
ページへの Incapsula Cookie の挿入ページへの Incapsula Cookie の挿入
arrow
既製のライブラリを使用した Imperva Incapsula の認識
CapMonster Cloud サービスは、Python および JavaScript (Node.js) 言語で快適に作業できる既製のライブラリを提供しています。
Python
JavaScript
解決、パラメータの取得、および Cookie の設定
Web ページでのキャプチャ認識の完全なサイクルのための 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 チャレンジを解決します
    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_ホスト>.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 Application Firewall) の有効化、
  • 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 からの応答を待機できていない可能性があります。テストのタイムアウト時間を延長し、バックエンドが十分に速く応答することを確認してください。
Bug Icon
期限切れの Imperva Cookie。
古い visid_incapincap_sesnlbi は、再度の Challenge やブロックの原因となります。
Bug Icon
過敏なルール。
厳格なシグネチャは、サイトへの実際の訪問者をブロックする可能性があります。
Bug Icon
不適切な設定。
サイトの特性を考慮していない誤った設定やルールは、誤ったブロックや誤検知(False Positive)を引き起こします。
保護の堅牢性チェック
統合後は、システムが本当に自動化された操作からサイトを守れているか確認しましょう。
セキュリティと最適化のヒント
リスクレベルに応じて WAF とセキュリティポリシーを設定してください。より正確な制御のために、Managed Rules、Bot Protection、カスタムルールを使用してください。
セキュリティイベントと WAF の発動をログに記録し、誤検知を特定してブロックの原因を分析してください。
透明性を確保するために、<b>プライバシーポリシー</b>と<b>利用規約</b>へのリンクを追加してください。これは、透明性とセキュリティ要件への準拠において重要です。
まとめ

すでにキャプチャや別の保護システムが導入されているサイトを引き継いだものの、コードにはアクセスできない場合でも心配はいりません!どの技術が使われているかを特定するのはそれほど難しくありません。動作が正しいか確認するには、隔離されたテスト環境で認識サービスCapMonster Cloudを利用し、トークン処理の仕組みと検証ロジックが正しく機能しているかをチェックできます。

Imperva Incapsulaの場合も、システムを特定し、その挙動を調べて、保護機能が正しく動いていることを確認すれば十分です。この記事では、Imperva Incapsulaを見分ける方法と、その導入や再設定に関する手順書の見つけ方を紹介しました。これにより、防御を安心して維持し、その動作をしっかりと管理できます。

Conclusion
参考リンク
DocIconImperva Incapsula ドキュメントDocIconCloud Security Console へのログインDocIconCapMonster Cloud ドキュメント(Imperva Incapsula との連携)