Symfony

Symfony는 재사용 가능한 PHP 컴포넌트와 웹 응용 프로그램, API, 마이크로서비스 및 웹 서비스를 구축하는 데 사용되는 PHP 프레임워크입니다.

이 안내서는 4.3 버전에서 성공적으로 테스트되었으며 이전 버전에서도 작동할 것으로 예상됩니다.

Symfony에는 미들웨어 개념이 없으므로 CodeIgniter 가이드의 단계와 동일한 방법으로 Shieldon 방화벽을 구현하기 위해 부모 컨트롤러를 만들 수 있습니다.

부모 컨트롤러에서 Shieldon 방화벽을 초기화하지 않고 싶은 경우 아래에서 제공하는 부트스트랩 모드 단계를 따를 수 있습니다.

Symfony 프레임워크에서의 방화벽

설치

PHP Composer를 사용하세요:

composer require shieldon/shieldon

이것은 Shieldon에 필요한 종속성도 설치합니다:

  • shieldon/psr-http PSR-7, 15, 17 구현으로 완전한 문서와 포괄적인 테스트를 제공합니다.
  • shieldon/event-dispatcher 가장 간단한 이벤트 디스패처입니다.
  • shieldon/web-security 웹 보안과 관련된 기능을 모은 컬렉션입니다.
  • shieldon/messenger 텔레그램, 라인, 로켓챗, 슬랙, SendGrid, MailGun 등의 타사 API 또는 서비스에 메시지를 보내기 위한 모듈 컬렉션입니다.

구현

부트스트랩

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/panel 경로로 접근할 수 있습니다. 페이지를 보려면 브라우저에서 해당 URL로 이동하세요.

컨트롤 패널

https://yourwebsite.com/firewall/panel

기본 로그인은 shieldon_user이며, 비밀번호는 shieldon_pass입니다. 방화벽 패널에 로그인한 후에는 로그인과 비밀번호를 변경하는 것이 좋습니다.

Shieldon 방화벽이 "Daemon" 설정 섹션에서 활성화된 경우 웹사이트를 모니터링하게 됩니다. 설정을 올바르게 설정했는지 확인하세요.