如果您有興趣透過利用Shieldon函式庫的公開API來建立自己的網站應用程式防火牆(WAF),您可以建立一個類似Shieldon Firewall的系統。
這裡有一個示例,展示了Shieldon的操作方式,為您在網站應用程式上手動實作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()
);
如果您在網站應用程式上只使用一個Shieldon核心實例,您可以忽略此設置。通道只是用於資料表的名稱前綴。
$kernel->setChannel('web_project');
此設置只允許10個工作階段查看當前頁面。默認過期時間為300秒。
$kernel->limitSession(10, 300);
您可以設置Captcha服務,例如Google reCAPTCHA。
$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);
}
}
就是這樣。