Это руководство поможет вам реализовать брандмауэр Shieldon в вашем приложении Laravel. Следующие шаги протестированы на Laravel 5 и 6.
Эти советы не являются единственным способом сделать это, но также дают вам некоторые идеи.
Используйте PHP Composer:
composer require shieldon/shieldon
Это также установит необходимые зависимости для Shieldon:
Вы можете использовать Shieldon как промежуточное ПО (middleware) или реализовать Shieldon на этапе инициализации вашего веб-приложения.
Инициализируйте Shieldon на этапе инициализации вашего приложения, прямо после включения автозагрузчика Composer. Этот способ предпочтительно, чтобы избежать возможных конфликтов с встроенными функциями Laravel.
В файле bootstrap/app.php
, после <?php
, добавьте следующий код.
/*
|--------------------------------------------------------------------------
| Запуск брандмауэра Shieldon
|--------------------------------------------------------------------------
|
| Брандмауэр Shieldon будет отслеживать все HTTP-запросы, поступающие на ваш сайт.
| Запуск брандмауэра Shieldon перед инициализацией Laravel поможет избежать возможных
| конфликтов с встроенными функциями 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::any('/firewall/panel/{path?}', function() {
$panel = new \Shieldon\Firewall\Panel();
$panel->csrf(['_token' => csrf_token()]);
$panel->entry();
})->where('path', '(.*)');
Если вы используете этот метод, брандмауэр Shieldon будет работать в глобальном контексте. Однако, вы можете настроить список исключений для URL-адресов, которые вы хотите игнорировать брандмауэром Shieldon.
Вы можете определить собственное промежуточное ПО (middleware) или использовать предоставляемый класс интеграции.
Если вы выбираете использование класса интеграции, пропустите шаг 1 и перейдите к шагу 2-2.
Выполните следующую команду, чтобы создать промежуточное ПО (middleware) с названием ShieldonFirewall
:
php artisan make:middleware ShieldonFirewall
Затем обновите метод handle
класса промежуточного ПО (middleware) ShieldonFirewall
следующим кодом:
<?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::any('/firewall/panel/{path?}', function() {
$panel = new \Shieldon\Firewall\Panel();
$panel->csrf(['_token' => csrf_token()]);
$panel->entry();
})->where('path', '(.*)');
Брандмауэр Shieldon начнет отслеживать ваш веб-сайт, если он включен в разделе настроек Daemon
. Убедитесь, что вы правильно настроили настройки.