Zend

Zend 프레임워크는 공식적으로 Zend MVC 및 Zend Expressive의 두 가지 유형의 스켈레톤을 제공합니다.

사용 중인 스켈레톤에 상관없이이 가이드는 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 텔레그램, 라인, 로켓챗, 슬랙, SendGrid, MailGun 등 타사 API 또는 서비스로 메시지를 보내기위한 모듈의 모음입니다.

구현

Zend Expressive

이는 Zend Expressive 스켈레톤에서 PSR-15 미들웨어를 사용하는 예입니다.

1. 미들웨어 등록

Zend Expressive용으로 준비 된 통합 클래스가 있습니다.

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;

/**
 * 방화벽 패널 핸들러
 * 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에 다음 줄을 추가하십시오.

예시:


// 시작 - Shieldon 방화벽

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

// 끝 - Shieldon 방화벽

여기까지입니다.

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,

여기까지입니다.

제어 패널

패널로 이동하여 방화벽 패널에 접속할 수 있습니다. 페이지를 보려면 브라우저에서 다음 URL로 이동하십시오.

https://yourwebsite.com/firewall/panel

기본 로그인은 shieldon_user이고 비밀번호는 shieldon_pass입니다. 방화벽 패널에 로그인 한 후 첫 번째로 해야 할 일은 로그인 및 비밀번호를 변경하는 것입니다.

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