ShieldonライブラリのパブリックAPIを利用して、独自のWebアプリケーションファイアウォール(WAF)を構築する興味がある場合は、Shieldonファイアウォールに類似したシステムを作成することができます。
以下に、Shieldonの動作を示す例を提供し、Webアプリケーションでの手動でのShieldonの実装についてのガイドを示します。
以下は、Shieldonインスタンスのライフサイクルを示すダイアグラムです。すべてを理解する必要はありませんが、独自のコンポーネントやCAPTCHAモジュールなどをカスタマイズする際に役立つ参考資料となります。
$kernel = new \Shieldon\Firewall\Kernel();
この例では、データドライバとしてSQLiteを使用します。
$dbLocation = APPPATH . 'cache/shieldon.sqlite3';
$pdoInstance = new \PDO('sqlite:' . $dbLocation);
$kernel->setDriver(
new \Shieldon\Firewall\Driver\SqliteDriver($pdoInstance)
);
Shieldonのコンポーネントは、セッションを永久的に許可または拒否するためのルールセットです。
この例では、TrustedBotコンポーネントをロードして人気のある検索エンジンを許可し、それらのボットがチェックプロセスに入るのを防ぎます。
$kernel->setComponent(
new \Shieldon\Firewall\Component\TrustedBot()
);
Webアプリケーションで1つのShieldonカーネルインスタンスのみを使用している場合は、この設定を無視しても構いません。チャネルは単にデータテーブルの名前のプレフィックスとして機能します。
$kernel->setChannel('web_project');
この設定により、現在のページを表示できるセッションは10セッションのみとなります。デフォルトの有効期限は300秒です。
$kernel->limitSession(10, 300);
Google reCAPTCHAなどのCAPTCHAサービスを設定することができます。
$kernel->setCaptcha(
new \Shieldon\Firewall\Captcha\Recaptcha([
'key' => '6LfkOaUUAAAAAH-AlTz3hRQ25SK8kZKb2hDRSwz9',
'secret' => '6LfkOaUUAAAAAJddZ6k-1j4hZC1rOqYZ9gLm0WQh',
])
);
$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);
}
}
以上です。