이 포괄적인 안내서는 웹 애플리케이션에 Shieldon 방화벽을 시작하는 방법에 대한 자세한 개요를 제공합니다. 함께 알아보겠습니다.
Shieldon 방화벽을 사용하기 전에 서버가 다음 요구 사항을 충족하는지 확인하세요:
Shieldon은 PHP Composer를 통해 설치할 수 있습니다:
composer require shieldon/shieldon
애플리케이션에서 Shieldon을 구현하는 세 가지 기본적인 방법이 있습니다:
각 구현 방법은 Slim 4, Laravel 6, CodeIgniter 3과 같은 인기 있는 프레임워크를 사용한 실제 예제와 함께 제공됩니다.
예시: Slim 4 프레임워크
Slim 4 프레임워크를 사용한 예제를 보여주는 것처럼 Shieldon을 PSR-15 미들웨어로 사용할 수 있습니다.
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());
예를 들어, Slim 4 프레임워크를 사용하는 경우 다음과 같이 코드를 작성해야 합니다. 그런 다음 https://yoursite.com/firewall/panel
URL을 방문하여 제어판에 로그인할 수 있습니다.
$app->any('/firewall/panel[/{params:.*}]', function (Request $request, Response $response, $args) {
$firewall = new \Shieldon\Firewall\Firewall($request, $response);
// Shieldon 방화벽이 파일을 배치할 디렉토리입니다.
// firewallMiddleware와 동일해야 합니다.
$firewall->configure(__DIR__ . '/../cache/shieldon_firewall');
$panel = new \Shieldon\Firewall\Panel();
// 제어판의 기본 URL입니다.
$panel->entry('/firewall/panel/');
});
참고:
POST
및 GET
HTTP 메소드를 모두 적용해야 합니다.POST
메소드가 필요합니다.예시: Laravel 6 프레임워크
Laravel 6 프레임워크를 사용한 예제를 보여주는 것처럼 애플리케이션의 부트스트랩 단계에서 Shieldon을 초기화할 수 있습니다.
bootstrap/app.php
파일의 <?php
다음에 다음 코드를 추가하세요.
/*
|--------------------------------------------------------------------------
| Shieldon 방화벽 실행
|--------------------------------------------------------------------------
|
| Shieldon 방화벽은 웹사이트로 전송되는 모든 HTTP 요청을 모니터링합니다.
| Laravel을 초기화하기 전에 Shieldon 방화벽을 실행하여
| Laravel의 내장 기능과 충돌하는 것을 피할 수 있습니다.
*/
if (isset($_SERVER['REQUEST_URI'])) {
// 이 디렉토리는 쓰기 가능해야 합니다.
// `storage/shieldon_firewall` 디렉토리에 위치시킵니다.
$storage = __DIR__ . '/../storage/shieldon_firewall';
$firewall = new \Shieldon\Firewall\Firewall();
$firewall->configure($storage);
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
}
Route::any('/firewall/panel/{path?}', function() {
$panel = new \Shieldon\Firewall\Panel();
$panel->csrf(['_token' => csrf_token()]);
// 진입점은 정의한 라우트와 동일해야 합니다.
$panel->entry('/firewall/panel/');
})->where('path', '(.*)');
예시: CodeIgniter 3 프레임워크
Shieldon을 다른 컨트롤러에서 상속하는 부모 컨트롤러에서 구현할 수도 있습니다. CodeIgniter 3 프레임워크를 사용한 예제를 보여드리겠습니다.
application/core/
디렉토리에 MY_Controller.php
라는 새 파일을 생성합니다. 이것이 부모 컨트롤러가 됩니다.
다음은 MY_Controller
의 기본 구조입니다:
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
}
그런 다음, MY_Controller
의 생성자에서 Shieldon 방화벽을 초기화합니다. 이렇게 하면 MY_Controller
를 상속하는 모든 컨트롤러에서 Shieldon 방화벽이 초기화됩니다.
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
// Composer 오토로더
require_once APPPATH . '../vendor/autoload.php';
// 이 디렉토리는 쓰기 가능해야 합니다.
$storage = APPPATH . 'cache/shieldon_firewall';
$firewall = new \Shieldon\Firewall\Firewall();
$firewall->configure($storage);
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
}
/**
* Shieldon 방화벽 보호.
*/
public function firewall()
{
$firewall = \Shieldon\Container::get('firewall');
$firewall->run();
}
}
다음으로, Shieldon 방화벽 제어판을 위한 컨트롤러를 정의해야 합니다. 이 예제에서는 Firewall
이라는 이름의 컨트롤러를 만들고 다음 코드를 추가합니다:
class Firewall extends MY_Controller
{
public function __construct()
{
parent::__construct();
}
/**
* 이것이 Shieldon 방화벽 제어판의 진입점입니다.
*/
public function panel()
{
$panel = new \Shieldon\Firewall\Panel();
$panel->entry('/firewall/panel/');
}
}
이제, Shieldon 방화벽은 MY_Controller
에서 초기화되며, MY_Controller
를 상속하는 모든 컨트롤러에서 firewall
메소드를 실행할 수 있습니다. 게다가, Shieldon 방화벽 제어판에 대한 진입점인 Firewall
컨트롤러가 정의되었습니다.
마지막으로, 선택한 구현 방법과 관계없이 https://yoursite.com/firewall/panel/
에 접근하면 로그인 페이지가 표시됩니다.
기본 사용자 이름과 비밀번호는 각각 shieldon_user
와 shieldon_pass
입니다. 보안상의 이유로, 첫 로그인 후에 로그인 자격 증명을 변경하는 것을 권장합니다.