Slim

Slimは私のお気に入りのフレームワークの一つです。Slimはマイクロフレームワークのため、Shieldon Firewallの実装も簡単です。それではさっそく始めましょう。

Slim FrameworkでのFirewall

インストール

PHPのComposerを使用します:

composer require shieldon/shieldon

これにより、Shieldonに必要な依存関係もインストールされます:

  • shieldon/psr-http 完全なドキュメンテーションと詳細なテストを備えたPSR-7、15、17の実装。
  • shieldon/event-dispatcher 最もシンプルなイベントディスパッチャー。
  • shieldon/web-security ウェブセキュリティに関連する関数のコレクション。
  • shieldon/messenger Telegram、Line、RocketChat、Slack、SendGrid、MailGunなど、サードパーティAPIやサービスにメッセージを送信するためのモジュールのコレクション。

実装方法

Slim 4

(1) ファイアウォールミドルウェアを作成する。

独自のミドルウェアを作成するか、統合クラスを使用することができます。

例:

class FirewallMiddleware
{
    /**
     * インボーカブルクラスの例
     *
     * @param ServerRequest  $request PSR-7リクエスト
     * @param RequestHandler $handler PSR-15リクエストハンドラ
     *
     * @return Response
     */
    public function __invoke(Request $request, RequestHandler $handler): Response
    {
        $response = $handler->handle($request);

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

        // Shieldon Firewallがファイルを配置するディレクトリ。
        $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がファイルを配置するディレクトリ。
    // firewallMiddlewareと同じである必要があります。
    $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 の両方をウェブサイトに適用する必要があります。
  • 一時的にブロックされたユーザーがCAPTCHAを解決するためには、POST メソッドが必要です。

以上です。

Slim 3

(1) アプリケーションにファイアウォールミドルウェアを追加する。

Shieldonにはこのミドルウェアに対応する統合クラスが用意されています。次の手順で使用してください。

例:

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

例えば、Slim 3のスケルトンを使用している場合、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 4フレームワークを使用している場合、以下のようなコードになります。そして、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がファイルを配置するディレクトリ。
    // firewallMiddlewareと同じである必要があります。
    $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/ にアクセスすると、Firewallのコントロールパネルにアクセスできます。ブラウザでこのURLに移動してページを確認してください。

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

デフォルトのログイン名は shieldon_user、パスワードは shieldon_pass です。Firewallのコントロールパネルにログインした後は、まずログイン名とパスワードを変更する必要があります。

もしDaemon設定セクションでShieldon Firewallが有効になっている場合、ウェブサイトの監視を開始します。設定を正しく行ったことを確認してください。