Slim 프레임워크는 제가 가장 좋아하는 프레임워크 중 하나입니다. Slim은 마이크로 프레임워크이므로 Shieldon 방화벽을 구현하는 것도 쉽습니다. 그러면 바로 시작해 보겠습니다.
PHP Composer를 사용하세요:
composer require shieldon/shieldon
이로써 Shieldon에 필요한 종속성도 설치됩니다:
직접 미들웨어를 만들거나 통합 클래스를 사용할 수 있습니다.
예제:
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;
}
}
예를 들어, Slim 4 프레임워크를 사용하고 있다면 아래와 같이 코드를 작성하면 됩니다.
예제:
$app->add(new FirewallMiddleware());
또는, 통합 클래스를 사용하려는 경우 아래의 코드를 사용하세요.
예제:
$app->add(new \Shieldon\Firewall\Integration\Slim4);
예를 들어, 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();
});
참고:
POST
와 GET
메소드가 모두 적용되어야 합니다.POST
메소드는 일시적으로 차단된 사용자가 CAPTCHA를 해결하기 위해 필요합니다.이것으로 끝입니다.
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);
};
예를 들어, 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 방화벽이 활성화되어 있는 경우, 웹사이트를 모니터링하기 시작합니다. 설정을 올바르게 설정했는지 확인하세요.