この包括的なガイドでは、ウェブアプリケーションのためのShieldonファイアウォールの始め方について詳しく説明します。以下に分けて説明します。
Shieldonファイアウォールを使用する前に、サーバーが以下の要件を満たしていることを確認してください。
ShieldonはPHP Composerを使用してインストールできます。
composer require shieldon/shieldon
アプリケーションにShieldonを実装する方法は3つあります。
各実装方法には、Slim 4、Laravel 6、CodeIgniter 3などの人気のあるフレームワークを使用した実用例が用意されています。
例:Slim 4フレームワーク
Shieldonは、Slim 4フレームワークを使用した例を示すように、PSR-15ミドルウェアとして使用することができます。
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->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());
たとえば、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, $response);
// Shieldonファイアウォールがファイルを配置するディレクトリ。
// FirewallMiddlewareと同じである必要があります。
$firewall->configure(__DIR__ . '/../cache/shieldon_firewall');
$panel = new \Shieldon\Firewall\Panel();
// コントロールパネルのベースURL。
$panel->entry('/firewall/panel/');
});
注意:
POST
と GET
の両方のHTTPメソッドを適用する必要があります。POST
メソッドが必要です。例:Laravel 6フレームワーク
Laravel 6フレームワークを使用した例として、アプリケーションのブートストラップ段階でShieldonを初期化することができます。
bootstrap/app.php
に、<?php
の後に以下のコードを追加します。
/*
|--------------------------------------------------------------------------
| Shieldonファイアウォールを実行する
|--------------------------------------------------------------------------
|
| Shieldonファイアウォールは、ウェブサイトに送信されるすべてのHTTPリクエストを監視します。
| Laravelを初期化する前にShieldonファイアウォールを実行することで、Laravelの組み込み機能との競合を回避できます。
*/
if (isset($_SERVER['REQUEST_URI'])) {
// このディレクトリは書き込み可能である必要があります。
// `storage/shieldon_firewall` ディレクトリに配置します。
$storage = __DIR__ . '/../storage/shieldon_firewall';
$firewall = new \Shieldon\Firewall\Firewall();
$firewall->configure($storage);
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
}
Route::any('/firewall/panel/{path?}', function() {
$panel = new \Shieldon\Firewall\Panel();
$panel->csrf(['_token' => csrf_token()]);
// エントリポイントは、定義したルートと同じである必要があります。
$panel->entry('/firewall/panel/');
})->where('path', '(.*)');
例:CodeIgniter 3フレームワーク
Shieldonは、他のコントローラーが拡張する親コントローラーに実装することもできます。以下は、CodeIgniter 3フレームワークを使用した例です。
application/core/
ディレクトリに MY_Controller.php
という新しいファイルを作成します。これが親コントローラーとなります。
以下は、MY_Controller
の基本構造です。
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
}
次に、MY_Controller
のコンストラクターでShieldonファイアウォールを初期化します。これにより、MY_Controller
を拡張するすべてのコントローラーでShieldonファイアウォールが初期化されるようになります。
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
// Composerのオートローダー
require_once APPPATH . '../vendor/autoload.php';
// このディレクトリは書き込み可能である必要があります。
$storage = APPPATH . 'cache/shieldon_firewall';
$firewall = new \Shieldon\Firewall\Firewall();
$firewall->configure($storage);
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
}
/**
* Shieldonファイアウォールの保護。
*/
public function firewall()
{
$firewall = \Shieldon\Container::get('firewall');
$firewall->run();
}
}
次に、Shieldonファイアウォールのコントロールパネル用のコントローラーを定義する必要があります。この例では、Firewall
という名前のコントローラーを作成します。
application/controllers/
ディレクトリに Firewall.php
という新しいファイルを作成し、以下のコードを追加します。
class Firewall extends MY_Controller
{
public function __construct()
{
parent::__construct();
}
/**
* これがShieldonファイアウォールのコントロールパネルのエントリーポイントです。
*/
public function panel()
{
$panel = new \Shieldon\Firewall\Panel();
$panel->entry('/firewall/panel/');
}
}
これで、ShieldonファイアウォールはMY_Controller
で初期化され、MY_Controller
を拡張し、firewall
メソッドを実行するすべてのコントローラーで使用できるようになりました。さらに、Shieldonファイアウォールのコントロールパネル用の Firewall
コントローラーも定義されており、それがShieldonファイアウォールのコントロールパネルへのエントリーポイントとなっています。
最後に、選択した実装方法に関係なく、https://yoursite.com/firewall/panel/
にアクセスすると、ログインページが表示されます。
デフォルトのユーザー名とパスワードは、それぞれ shieldon_user
と shieldon_pass
です。セキュリティ上の理由から、最初のログイン後にログイン資格情報を変更することを強くお勧めします。