独自のWAFを構築する

ShieldonライブラリのパブリックAPIを利用して、独自のWebアプリケーションファイアウォール(WAF)を構築する興味がある場合は、Shieldonファイアウォールに類似したシステムを作成することができます。

以下に、Shieldonの動作を示す例を提供し、Webアプリケーションでの手動でのShieldonの実装についてのガイドを示します。

ライフサイクルダイアグラム

以下は、Shieldonインスタンスのライフサイクルを示すダイアグラムです。すべてを理解する必要はありませんが、独自のコンポーネントやCAPTCHAモジュールなどをカスタマイズする際に役立つ参考資料となります。

ライフサイクルダイアグラム

ヒント

1. Shieldonインスタンスを初期化する

$kernel = new \Shieldon\Firewall\Kernel();

2. データドライバを設定する

この例では、データドライバとしてSQLiteを使用します。

$dbLocation = APPPATH . 'cache/shieldon.sqlite3';
$pdoInstance = new \PDO('sqlite:' . $dbLocation);

$kernel->setDriver(
    new \Shieldon\Firewall\Driver\SqliteDriver($pdoInstance)
);

3. コンポーネントを設定する

Shieldonのコンポーネントは、セッションを永久的に許可または拒否するためのルールセットです。

この例では、TrustedBotコンポーネントをロードして人気のある検索エンジンを許可し、それらのボットがチェックプロセスに入るのを防ぎます。

$kernel->setComponent(
    new \Shieldon\Firewall\Component\TrustedBot()
);

4. チャネルを設定する(オプション)

Webアプリケーションで1つのShieldonカーネルインスタンスのみを使用している場合は、この設定を無視しても構いません。チャネルは単にデータテーブルの名前のプレフィックスとして機能します。

$kernel->setChannel('web_project');

5. オンラインセッション数を制限する(オプション)

この設定により、現在のページを表示できるセッションは10セッションのみとなります。デフォルトの有効期限は300秒です。

$kernel->limitSession(10, 300);

6. CAPTCHAモジュールを読み込む

Google reCAPTCHAなどのCAPTCHAサービスを設定することができます。

$kernel->setCaptcha(
    new \Shieldon\Firewall\Captcha\Recaptcha([
        'key' => '6LfkOaUUAAAAAH-AlTz3hRQ25SK8kZKb2hDRSwz9',
        'secret' => '6LfkOaUUAAAAAJddZ6k-1j4hZC1rOqYZ9gLm0WQh',
    ])
);

7. ウェブサイトを保護する

$result = $kernel->run();

if ($result !== $kernel::RESPONSE_ALLOW) {
    if ($kernel->captchaResponse()) {
        // 現在のセッションのブロックを解除します。
        $kernel->unban();
    }

    $response = $kernel->respond();

    if ($response->getStatusCode() !== 200) {
        $httpResolver = new \Shieldon\Firewall\HttpResolver();
        $httpResolver($response);
    }
}

以上です。