Zendフレームワークは、公式にはZend MVCとZend Expressiveの2種類のスケルトンを提供しています。
どのスケルトンを使用しているかにかかわらず、このガイドはShieldonファイアウォールの実装方法についてのアイデアを提供するかもしれません。Zendではどの方法がベストプラクティスとされているかは分かりませんので、好きな方法を選んでください。
PHPのComposerを使用してください:
composer require shieldon/shieldon
これにより、Shieldonに必要な依存関係もインストールされます:
Zend ExpressiveスケルトンでPSR-15ミドルウェアを使用する方法の例です。
Zend Expressive用に準備されたIntegrationクラスがあります。
pipeline.php
に次の行を追加してください。
例:
$app->pipe(\Shieldon\Firewall\Integration\ZendPsr15::class);
App/src/Handler
ディレクトリに移動し、FirewallPanelHandler
という名前のPHPファイルを作成してください。
以下のテキストをコピーしてそのファイルに貼り付けてください。
例:
<?php
declare(strict_types=1);
namespace App\Handler;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Zend\Diactoros\Response;
/**
* Firewall Panel Handler
* CSRFが有効な場合は、制御パネルにCSRFトークンを渡す必要があります。
*/
class FirewallPanelHandler implements RequestHandlerInterface
{
public function handle(ServerRequestInterface $request): ResponseInterface
{
$panel = new \Shieldon\Firewall\Panel();
$panel->entry();
return new Response();
}
}
route.php
に次の行を追加してください。
例:
// Begin - Shieldon Firewall
$app->route('/firewall/panel/', App\Handler\FirewallPanelHandler::class, ['GET', 'POST']);
foreach(\Shieldon\Firewall\Panel::getRoutes() as $route) {
$app->route("/firewall/panel/$route/", App\Handler\FirewallPanelHandler::class, ['GET', 'POST']);
}
// End - Shieldon Firewall
以上です。
どのバージョンのZendフレームワークを使用しているかはわかりませんので、Zendのほとんどのバージョンで動作する手順を提供します。
public/index.php
の次の行の下に以下のコードを追加してください。
/*
|--------------------------------------------------------------------------
| Shieldonファイアウォールの実行
|--------------------------------------------------------------------------
|
| Shieldonファイアウォールは、ウェブサイトに対するすべてのHTTPリクエストを監視します。
|
*/
if (isset($_SERVER['REQUEST_URI'])) {
// このディレクトリは書き込み可能でなければなりません。
$storage = dirname($_SERVER['SCRIPT_FILENAME']) . '/../shieldon_firewall';
$firewall = new \Shieldon\Firewall\Firewall();
$firewall->configure($storage);
$firewall->controlPanel('/firewall/panel');
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
}
次のステップは、コントロールパネル用のコントローラを作成することです。
FirewallController
という名前のコントローラを作成してください。
<?php
namespace Application\Controller;
use Zend\Mvc\Controller\AbstractActionController;
class FirewallController extends AbstractActionController
{
/**
* ファイアウォールパネルのエントリーポイント。
*/
public function panelAction()
{
$panel = new \Shieldon\Firewall\Panel();
$panel->entry();
}
}
以下の場所にあるmodule.config.php
ファイルを開いてください:
module/Application/config/module.config.php
(3-1) ['router']['routes']
配列内に、次のコードを追加してください:
例:
'firewallpanel' => [
'type' => Segment::class,
'options' => [
'route' => '/firewall/panel[:slug]',
'constraints' => [
'slug' => '[a-zA-Z0-9\/]*',
],
'defaults' => [
'controller' => Controller\FirewallController::class,
'action' => 'panel',
],
],
],
(3-2) ['controllers']['factories']
配列内に、次のコードを追加してください:
Controller\FirewallController::class => InvokableFactory::class,
以上です。
ファイアウォールパネルには、/firewall/panel/
にアクセスしてアクセスできます。ページを表示するには、ブラウザでこのURLにアクセスしてください。
https://yourwebsite.com/firewall/panel
デフォルトのログインはshieldon_user
で、パスワードはshieldon_pass
です。ファイアウォールパネルにログインした後、最初に行うべきことは、ログインとパスワードを変更することです。
Daemon
の設定セクションでShieldonファイアウォールが有効になっている場合、ウェブサイトを監視し始めます。設定を正しく行ったことを確認してください。