이 가이드는 Laravel 애플리케이션에 Shieldon 방화벽을 구현하는 데 도움을 줍니다. 다음 단계는 Laravel 5와 6에서 테스트되었습니다.
이 팁들은 유일한 방법이 아니라 몇 가지 아이디어를 제공합니다.
PHP Composer를 사용합니다:
composer require shieldon/shieldon
이는 Shieldon에 필요한 종속성도 설치합니다:
Shieldon을 미들웨어로 사용하거나 웹 애플리케이션의 부트스트랩 단계에서 Shieldon을 구현할 수 있습니다.
Composer 오토로더를 포함한 이후에 애플리케이션의 부트스트랩 단계에서 Shieldon을 초기화합니다. 이렇게 하면 Laravel의 내장된 기능과의 가능한 충돌을 피할 수 있습니다.
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);
// 제어판의 기본 URL
$firewall->controlPanel('/firewall/panel/');
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
}
routes/web.php
파일에 다음 Route를 추가합니다.
Route::any('/firewall/panel/{path?}', function() {
$panel = new \Shieldon\Firewall\Panel();
$panel->csrf(['_token' => csrf_token()]);
$panel->entry();
})->where('path', '(.*)');
이 방법을 채택하면 Shieldon 방화벽은 전역 범위에서 실행됩니다. 그러나 Shieldon 방화벽이 무시할 URL에 대한 제외 목록을 설정할 수도 있습니다.
사용자 정의 미들웨어를 정의하거나 제공되는 통합 클래스를 사용할 수 있습니다.
통합 클래스를 사용하는 경우 단계 1을 건너뛰고 단계 2-2로 이동하십시오.
다음 명령을 실행하여 ShieldonFirewall
이라는 이름의 미들웨어를 생성합니다.
php artisan make:middleware ShieldonFirewall
그런 다음 ShieldonFirewall
미들웨어 클래스의 handle
메서드를 다음 코드로 업데이트합니다.
<?php
namespace App\Http\Middleware;
use Closure;
class ShieldonFirewall
{
/**
* 들어오는 요청을 처리합니다.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$firewall = new \Shieldon\Firewall\Firewall();
// Shieldon 방화벽이 파일을 배치할 디렉토리입니다.
$storage = storage_path('shieldon_firewall');;
$firewall->configure($storage);
// 제어판의 기본 URL
$firewall->controlPanel('/firewall/panel/');
$firewall->getKernel()->setCaptcha(
new Csrf([
'name' => '_token',
'value' => csrf_token(),
])
);
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
return $next($request);
}
}
app/Http/Kernel.php
파일을 업데이트하고 $routeMiddleware
속성에 다음 줄을 추가합니다.
단계 2-1의 경우:
'firewall' => \App\Http\Middleware\ShieldonFirewall::class,
단계 2-2의 경우 (통합 클래스 사용):
통합 클래스를 사용하는 경우 코드는 다음과 같습니다:
'firewall' => \Shieldon\Firewall\Integration\Laravel::class,
routes/web.php
파일에 다음 Route를 추가합니다.
Route::any('/firewall/panel/{path?}', function() {
$panel = new \Shieldon\Firewall\Panel();
$panel->csrf(['_token' => csrf_token()]);
$panel->entry();
})->where('path', '(.*)');
Shieldon 방화벽은 Daemon
설정 섹션에서 활성화된 경우 웹사이트를 모니터링하기 시작합니다. 설정을 올바르게 설정했는지 확인하십시오.