Slim

Slim 框架是我最喜歡的之一。由於 Slim 是一個微型框架,因此實作 Shieldon 防火牆也很容易。言歸正傳,讓我們開始吧。

Slim 框架中的防火牆

安裝

使用 PHP Composer:

composer require shieldon/shieldon

這也會安裝 Shieldon 所需的依賴套件:

實作

Slim 4

(1)創建防火牆中間件。

您可以自己創建中間件,或者只需使用 整合類

範例:

class FirewallMiddleware
{
    /**
     * Example middleware invokable class
     *
     * @param ServerRequest  $request PSR-7 request
     * @param RequestHandler $handler PSR-15 request handler
     *
     * @return Response
     */
    public function __invoke(Request $request, RequestHandler $handler): Response
    {
        $response = $handler->handle($request);

        $firewall = new \Shieldon\Firewall\Firewall($request, $response);

        // Shieldon 防火牆將放置其文件的目錄。
        $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');
        $response = $firewall->run();

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

        return $response;
    }
}

(2)在應用程序中添加防火牆中間件。

例如,如果您使用的是 Slim 4 框架,程式碼應該如下所示。

範例:

$app->add(new FirewallMiddleware());

或者,如果您更喜歡使用整合類,程式碼如下所示。

範例:

$app->add(new \Shieldon\Firewall\Integration\Slim4);

(3)為控制面板創建路由。

例如,如果您使用的是 Slim 4 框架,程式碼應該如下所示。然後,您可以訪問 URL https://yourwebsite.com/firewall/panel/ 來登錄控制面板。

範例:

$app->any('/firewall/panel[/{params:.*}]', function (Request $request, Response $response, $args) {

$firewall = new \Shieldon\Firewall\Firewall($request);

    // Shieldon 防火牆將放置其文件的目錄。
    // 必須與防火牆中間件相同。
    $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');

    // 控制面板的基礎 URL。
    $firewall->controlPanel('/firewall/panel/');

    $panel = new \Shieldon\Firewall\Panel();

    // 開始 - 如果啟用了 Slim-CSRF,需要設置 CSRF 字段。

    $csrf = new \Slim\Csrf\Guard();
    $nameKey = $csrf->getTokenNameKey();
    $valueKey = $csrf->getTokenValueKey();

    $csrfName = $request->getAttribute('csrf_name');
    $csrfVale = $request->getAttribute('csrf_value');

    $panel->csrf(
        [$nameKey => $csrfName],
        [$valueKey => $csrfVale]
    );

    // 結束 - Slim-CSRF

    $panel->entry();
});

注意:

  • HTTP 方法 POSTGET 都應應用於您的網站。
  • 暫時被阻止的用戶需要使用 POST 方法來解決 CAPTCHA。

就是這樣。

Slim 3

(1)在應用程序中添加防火牆中間件。

Shieldon 已經為此中間件準備了一個整合類,只需按照以下步驟使用即可。

範例:

$app->add(new \Shieldon\Firewall\Integration\Slim3);

例如,如果您使用的是 Slim3 骨架,middleware.php 中的程式碼如下所示:

範例:

<?php

use Slim\App;

return function (App $app) {
    $app->add(new \Shieldon\Firewall\Integration\Slim3);
    $app->add(new \Slim\Csrf\Guard);
};

(2)為控制面板創建路由。

例如,如果您使用的是 Slim 3 框架,程式碼應該如下所示。然後,您可以訪問 URL https://yourwebsite.com/firewall/panel/ 來登錄控制面板。

範例:

$app->map(['GET', 'POST'], '/firewall/panel[/{params:.*}]', function (Request $request, Response $response, array $args) {

    $firewall = new \Shieldon\Firewall\Firewall($request);

    // Shieldon 防火牆將放置其文件的目錄。
    // 必須與防火牆中間件相同。
    $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');

    // 控制面板的基礎 URL。
    $firewall->controlPanel('/firewall/panel/');

    $panel = new \Shieldon\Firewall\Panel();

    // 開始 - 如果啟用了 Slim-CSRF,需要設置 CSRF 字段。

    $csrf = new \Slim\Csrf\Guard();
    $nameKey = $csrf->getTokenNameKey();
    $valueKey = $csrf->getTokenValueKey();

    $csrfName = $request->getAttribute('csrf_name');
    $csrfVale = $request->getAttribute('csrf_value');

    $panel->csrf(
        [$nameKey => $csrfName],
        [$valueKey => $csrfVale]
    );

    // 結束 - Slim-CSRF

    $panel->entry();
});

就是這樣。

控制面板

您可以通過 /firewall/panel/ 訪問防火牆控制面板,在瀏覽器中打開以下 URL。

https://yourwebsite.com/firewall/panel/

默認登錄帳號是 shieldon_user,密碼是 shieldon_pass。登錄防火牆面板後,您應該首先更改登錄帳號和密碼。

如果在「Daemon」設定部分啟用了 Shieldon 防火牆,它將開始監視您的網站。請確保您已正確設置這些設定。