このガイドでは、LaravelアプリケーションにShieldonファイアウォールを実装する方法について説明します。以下の手順はLaravel 5と6でテストされています。
これらのヒントは唯一の方法ではありませんが、いくつかのアイデアを提供します。
PHP Composerを使用します:
composer require shieldon/shieldon
これにより、Shieldonに必要な依存関係もインストールされます:
Shieldonをミドルウェアとして使用するか、ウェブアプリケーションのブートストラップステージでShieldonを実装できます。
アプリケーションのブートストラップステージでShieldonを初期化します。主にComposerのオートローダーの後に行うことが望ましいです。これにより、Laravelの組み込み関数との衝突を回避することができます。
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);
// コントロールパネルのベースURL
$firewall->controlPanel('/firewall/panel/');
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
}
routes/web.php
ファイルに以下のルートを追加してください。
Route::any('/firewall/panel/{path?}', function() {
$panel = new \Shieldon\Firewall\Panel();
$panel->csrf(['_token' => csrf_token()]);
$panel->entry();
})->where('path', '(.*)');
この方法を採用すると、Shieldonファイアウォールはグローバルスコープで実行されます。ただし、Shieldonファイアウォールが無視するURLの除外リストを設定することもできます。
カスタムミドルウェアを定義するか、提供される統合クラスを使用することができます。
統合クラスを使用する場合は、ステップ1をスキップしてステップ2-2に進んでください。
次のコマンドを実行して、ShieldonFirewall
という名前のミドルウェアを作成します。
php artisan make:middleware ShieldonFirewall
その後、ShieldonFirewall
ミドルウェアクラスのhandle
メソッドを次のコードで更新してください。
<?php
namespace App\Http\Middleware;
use Closure;
class ShieldonFirewall
{
/**
* リクエストの処理を行います。
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$firewall = new \Shieldon\Firewall\Firewall();
// Shieldonファイアウォールがファイルを配置するディレクトリ。
$storage = storage_path('shieldon_firewall');;
$firewall->configure($storage);
// コントロールパネルのベースURL
$firewall->controlPanel('/firewall/panel/');
$firewall->getKernel()->setCaptcha(
new Csrf([
'name' => '_token',
'value' => csrf_token(),
])
);
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
return $next($request);
}
}
app/Http/Kernel.php
ファイルを更新し、$routeMiddleware
プロパティに以下の行を追加してください。
ステップ2-1の場合:
'firewall' => \App\Http\Middleware\ShieldonFirewall::class,
ステップ2-2の場合(統合クラスを使用する場合):
統合クラスを使用する場合、次のようになります:
'firewall' => \Shieldon\Firewall\Integration\Laravel::class,
routes/web.php
ファイルに以下のルートを追加してください。
Route::any('/firewall/panel/{path?}', function() {
$panel = new \Shieldon\Firewall\Panel();
$panel->csrf(['_token' => csrf_token()]);
$panel->entry();
})->where('path', '(.*)');
Shieldonファイアウォールは、Daemon
設定セクションで有効になっている場合にウェブサイトを監視し始めます。設定を正しく行ったことを確認してください。