Symfony

Symfonyは再利用可能なPHPコンポーネントとPHPフレームワークであり、Webアプリケーション、API、マイクロサービス、Webサービスの構築に使用されます。

このガイドはバージョン4.3での動作確認済みですが、以前のバージョンでも動作するはずです。

Symfonyにはミドルウェアのコンセプトが存在しないため、CodeIgniterガイドの手順と同様に、親コントローラを作成してShieldonファイアウォールを実装することができます。

親コントローラでShieldonファイアウォールを初期化することが好ましくない場合は、以下に示すBootstrapモードの手順に従ってください。

Symfonyフレームワークにおけるファイアウォール

インストール

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

実装

Bootstrap

1. カーネルの初期化前に

config/bootstrap.phpファイルの次の行の後に、次のコードを追加してください:

例:

require dirname(__DIR__).'/vendor/autoload.php';
/*
|--------------------------------------------------------------------------
| Shieldonファイアウォールを実行
|--------------------------------------------------------------------------
|
| Shieldonファイアウォールは、ウェブサイトに寄せられるすべてのHTTPリクエストを監視します。
*/
if (isset($_SERVER['REQUEST_URI'])) {

    // このディレクトリには書き込み権限が必要です。
    $storage = __DIR__ . '/../storage/shieldon';

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

2. ファイアウォールパネル用のルートの定義

次のコマンドを実行して、FirewallPanelControllerという名前のコントローラを作成します。

例:

php bin/console make:controller FirewallPanelController

FirewallPanelControllerコントローラクラスに以下の行を追加してください:

例:

$panel = new \Shieldon\Firewall\Panel();
$panel->entry();

CSRFが有効になっている場合は、次の行を追加してください:

例:

$csrf = $this->container->get('security.csrf.token_manager');
$token = $csrf->refreshToken('key');

完全な例は次のようになります:

例:

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class FirewallPanelController extends AbstractController
{
    /**
     * @Route("/firewall/panel/", name="firewall_panel")
     */
    public function panel()
    {
        $panel = new \Shieldon\Firewall\Panel();

        // `symfony/security-csrf`がインストールされている場合。
        $csrf = $this->container->get('security.csrf.token_manager');
        $token = $csrf->refreshToken('key')->getValue();

        $panel->csrf(['_token' => $token]);
        $panel->entry();
        exit;
    }

    /**
     * @Route("/firewall/panel/{class}/{method}", name="firewall_panel_page")
     */
    public function page()
    {
        $this->panel();
    }
}

以上です。

Firewallパネルには/firewall/panelでアクセスできます。ページを表示するには、ブラウザでこのURLにアクセスしてください。

コントロールパネル

https://yourwebsite.com/firewall/panel

デフォルトのログインはshieldon_user、パスワードはshieldon_passです。Firewallパネルにログインしたら、まずログインとパスワードを変更することをお勧めします。

Shieldonファイアウォールが「Daemon」設定セクションで有効になっている場合、ウェブサイトを監視し始めます。設定を正しく行ったことを確認してください。