Slim

Slim 프레임워크는 제가 가장 좋아하는 프레임워크 중 하나입니다. Slim은 마이크로 프레임워크이므로 Shieldon 방화벽을 구현하는 것도 쉽습니다. 그러면 바로 시작해 보겠습니다.

Slim Framework에서의 방화벽

설치

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 또는 서비스로 메시지를 전송하기 위한 모듈들의 컬렉션입니다.

구현하기

Slim 4

(1) 방화벽 미들웨어 생성하기.

직접 미들웨어를 만들거나 통합 클래스를 사용할 수 있습니다.

예제:

class FirewallMiddleware
{
    /**
     * 예제 미들웨어 인보커블 클래스
     *
     * @param ServerRequest  $request PSR-7 요청
     * @param RequestHandler $handler PSR-15 요청 핸들러
     *
     * @return Response
     */
    public function __invoke(Request $request, RequestHandler $handler): Response
    {
        $response = $handler->handle($request);

        $firewall = new \Shieldon\Firewall\Firewall($request, $response);

        // Shieldon 방화벽이 파일을 저장할 디렉토리입니다.
        $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');
        $response = $firewall->run();

        if ($response->getStatusCode() !== 200) {
            $httpResolver = new \Shieldon\Firewall\HttpResolver();
            $httpResolver($response);
        }

        return $response;
    }
}

(2) 어플리케이션에 방화벽 미들웨어 추가하기.

예를 들어, Slim 4 프레임워크를 사용하고 있다면 아래와 같이 코드를 작성하면 됩니다.

예제:

$app->add(new FirewallMiddleware());

또는, 통합 클래스를 사용하려는 경우 아래의 코드를 사용하세요.

예제:

$app->add(new \Shieldon\Firewall\Integration\Slim4);

(3) 컨트롤 패널을 위한 라우트 생성하기.

예를 들어, Slim 4 프레임워크를 사용하고 있다면 아래와 같이 코드를 작성하면 됩니다. 그러면 URL https://yourwebsite.com/firewall/panel/에 접속하여 컨트롤 패널에 로그인할 수 있습니다.

예제:

$app->any('/firewall/panel[/{params:.*}]', function (Request $request, Response $response, $args) {

$firewall = new \Shieldon\Firewall\Firewall($request);

    // Shieldon 방화벽이 파일을 저장할 디렉토리입니다.
    // firewallMiddleware와 동일해야 합니다.
    $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');

    // 컨트롤 패널을 위한 기본 URL입니다.
    $firewall->controlPanel('/firewall/panel/');

    $panel = new \Shieldon\Firewall\Panel();

    // Slim-CSRF를 사용하는 경우 CSRF 필드를 설정해야 합니다.

    $csrf = new \Slim\Csrf\Guard();
    $nameKey = $csrf->getTokenNameKey();
    $valueKey = $csrf->getTokenValueKey();

    $csrfName = $request->getAttribute('csrf_name');
    $csrfVale = $request->getAttribute('csrf_value');

    $panel->csrf(
        [$nameKey => $csrfName],
        [$valueKey => $csrfVale]
    );

    // Slim-CSRF 종료

    $panel->entry();
});

참고:

  • 웹사이트에는 POSTGET 메소드가 모두 적용되어야 합니다.
  • POST 메소드는 일시적으로 차단된 사용자가 CAPTCHA를 해결하기 위해 필요합니다.

이것으로 끝입니다.

Slim 3

(1) 어플리케이션에 방화벽 미들웨어 추가하기.

Shieldon은 이 미들웨어에 대한 통합 클래스를 이미 제공하고 있으므로, 다음 단계에 따라 사용하시면 됩니다.

예제:

$app->add(new \Shieldon\Firewall\Integration\Slim3);

예를 들어, Slim3 스켈레톤을 사용하고 있다면 middleware.php 파일의 코드는 다음과 같을 것입니다:

예제:

<?php

use Slim\App;

return function (App $app) {
    $app->add(new \Shieldon\Firewall\Integration\Slim3);
    $app->add(new \Slim\Csrf\Guard);
};

(2) 컨트롤 패널을 위한 라우트 생성하기.

예를 들어, Slim 4 프레임워크를 사용하고 있다면 아래와 같이 코드를 작성하면 됩니다. 그러면 URL https://yourwebsite.com/firewall/panel/에 접속하여 컨트롤 패널에 로그인할 수 있습니다.

예제:

$app->map(['GET', 'POST'], '/firewall/panel[/{params:.*}]', function (Request $request, Response $response, array $args) {

    $firewall = new \Shieldon\Firewall\Firewall($request);

    // Shieldon 방화벽이 파일을 저장할 디렉토리입니다.
    // firewallMiddleware와 동일해야 합니다.
    $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');

    // 컨트롤 패널을 위한 기본 URL입니다.
    $firewall->controlPanel('/firewall/panel/');

    $panel = new \Shieldon\Firewall\Panel();

    // Slim-CSRF를 사용하는 경우 CSRF 필드를 설정해야 합니다.

    $csrf = new \Slim\Csrf\Guard();
    $nameKey = $csrf->getTokenNameKey();
    $valueKey = $csrf->getTokenValueKey();

    $csrfName = $request->getAttribute('csrf_name');
    $csrfVale = $request->getAttribute('csrf_value');

    $panel->csrf(
        [$nameKey => $csrfName],
        [$valueKey => $csrfVale]
    );

    // Slim-CSRF 종료

    $panel->entry();
});

이것으로 끝입니다.

컨트롤 패널

/firewall/panel/로 접근하여 방화벽 패널에 액세스할 수 있습니다. 브라우저에서 이 URL로 이동하여 페이지를 확인하세요.

https://yourwebsite.com/firewall/panel/

기본 로그인은 shieldon_user이고 비밀번호는 shieldon_pass입니다. 방화벽 패널에 로그인한 후에는 먼저 로그인 및 비밀번호를 변경해야 합니다.

Daemon 설정 섹션에서 Shieldon 방화벽이 활성화되어 있는 경우, 웹사이트를 모니터링하기 시작합니다. 설정을 올바르게 설정했는지 확인하세요.