Slimは私のお気に入りのフレームワークの一つです。Slimはマイクロフレームワークのため、Shieldon Firewallの実装も簡単です。それではさっそく始めましょう。
PHPのComposerを使用します:
composer require shieldon/shieldon
これにより、Shieldonに必要な依存関係もインストールされます:
独自のミドルウェアを作成するか、統合クラスを使用することができます。
例:
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;
}
}
例えば、Slim 4フレームワークを使用している場合、以下のようなコードになります。
例:
$app->add(new FirewallMiddleware());
または、統合クラスを使用する場合、以下のコードになります。
例:
$app->add(new \Shieldon\Firewall\Integration\Slim4);
例えば、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();
});
注意:
POST
と GET
の両方をウェブサイトに適用する必要があります。POST
メソッドが必要です。以上です。
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);
};
例えば、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が有効になっている場合、ウェブサイトの監視を開始します。設定を正しく行ったことを確認してください。