自建網站應用程式防火牆(WAF)

如果您有興趣透過利用Shieldon函式庫的公開API來建立自己的網站應用程式防火牆(WAF),您可以建立一個類似Shieldon Firewall的系統。

這裡有一個示例,展示了Shieldon的操作方式,為您在網站應用程式上手動實作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. 設置通道。(可選)

如果您在網站應用程式上只使用一個Shieldon核心實例,您可以忽略此設置。通道只是用於資料表的名稱前綴。

$kernel->setChannel('web_project');

5. 限制在線工作階段數量。(可選)

此設置只允許10個工作階段查看當前頁面。默認過期時間為300秒。

$kernel->limitSession(10, 300);

6. 加載Captcha模組。

您可以設置Captcha服務,例如Google reCAPTCHA。

$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);
    }
}

就是這樣。