Zend

Zendフレームワークは、公式にはZend MVCとZend Expressiveの2種類のスケルトンを提供しています。

どのスケルトンを使用しているかにかかわらず、このガイドはShieldonファイアウォールの実装方法についてのアイデアを提供するかもしれません。Zendではどの方法がベストプラクティスとされているかは分かりませんので、好きな方法を選んでください。

Zendフレームワークのファイアウォール

インストール

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やサービスにメッセージを送信するためのモジュールのコレクションです。

実装方法

Zend Expressive

Zend ExpressiveスケルトンでPSR-15ミドルウェアを使用する方法の例です。

1. ミドルウェアを登録する

Zend Expressive用に準備されたIntegrationクラスがあります。

pipeline.phpに次の行を追加してください。

例:

$app->pipe(\Shieldon\Firewall\Integration\ZendPsr15::class);

2. ハンドラを定義する

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();
    }
}

3. ファイアウォールパネルのルートを定義する

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 MVC

どのバージョンのZendフレームワークを使用しているかはわかりませんので、Zendのほとんどのバージョンで動作する手順を提供します。

1. コアの初期化の前に

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);
    }
}

次のステップは、コントロールパネル用のコントローラを作成することです。

2. コントローラを定義する

FirewallControllerという名前のコントローラを作成してください。

<?php

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;

class FirewallController extends AbstractActionController
{
    /**
     * ファイアウォールパネルのエントリーポイント。
     */
    public function panelAction()
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->entry();
    }
}

3. ファイアウォールパネルのルートを定義する

以下の場所にある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ファイアウォールが有効になっている場合、ウェブサイトを監視し始めます。設定を正しく行ったことを確認してください。