Este guia irá ajudá-lo a implementar o Firewall Shieldon em sua aplicação Laravel. Os passos a seguir foram testados no Laravel 5 e 6.
Essas dicas não são a única maneira de fazer isso, mas também lhe dão algumas ideias.
Use o Composer PHP:
composer require shieldon/shieldon
Isso também irá instalar as dependências necessárias para o Shieldon:
Você pode usar o Shieldon como um middleware ou implementar o Shieldon na fase de inicialização da sua aplicação web.
Inicialize o Shieldon na fase de inicialização da sua aplicação, logo após incluir o autoloader do Composer. Essa é a maneira preferida para evitar possíveis conflitos com as funções internas do Laravel.
No seu arquivo bootstrap/app.php
, após <?php
, adicione o seguinte código.
/*
|--------------------------------------------------------------------------
| Executar o Firewall Shieldon
|--------------------------------------------------------------------------
|
| O Firewall Shieldon irá monitorar todas as requisições HTTP que chegam ao seu website.
| Executar o Firewall Shieldon antes de inicializar o Laravel irá evitar possíveis
| conflitos com as funções internas do Laravel.
*/
if (isset($_SERVER['REQUEST_URI'])) {
// Este diretório deve ter permissão de escrita.
// Nós o colocamos no diretório `storage/shieldon_firewall`.
$storage = __DIR__ . '/../storage/shieldon_firewall';
$firewall = new \Shieldon\Firewall\Firewall();
$firewall->configure($storage);
// A URL base para o painel de controle.
$firewall->controlPanel('/firewall/panel/');
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
}
Adicione a seguinte rota ao seu arquivo routes/web.php
:
Route::any('/firewall/panel/{path?}', function() {
$panel = new \Shieldon\Firewall\Panel();
$panel->csrf(['_token' => csrf_token()]);
$panel->entry();
})->where('path', '(.*)');
Se você adotar este método, o Firewall Shieldon será executado no escopo global. No entanto, você pode configurar uma lista de exclusões para as URLs que você deseja que o Firewall Shieldon ignore.
Você pode definir um middleware personalizado ou usar a classe de integração fornecida.
Se optar por usar a classe de integração, pule o passo 1 e vá para o passo 2-2.
Execute o seguinte comando para criar um middleware chamado ShieldonFirewall
:
php artisan make:middleware ShieldonFirewall
Em seguida, atualize o método handle
da classe de middleware ShieldonFirewall
com o seguinte código:
<?php
namespace App\Http\Middleware;
use Closure;
class ShieldonFirewall
{
/**
* Manipula uma requisição recebida.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$firewall = new \Shieldon\Firewall\Firewall();
// O diretório onde o Firewall Shieldon irá colocar seus arquivos.
$storage = storage_path('shieldon_firewall');;
$firewall->configure($storage);
// URL base para o painel de controle.
$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);
}
}
Atualize o arquivo app/Http/Kernel.php
e adicione a seguinte linha à propriedade $routeMiddleware
:
Para o Passo 2-1:
'firewall' => \App\Http\Middleware\ShieldonFirewall::class,
Para o Passo 2-2 (usando a classe de integração):
Se você usar a classe de integração, o código será assim:
'firewall' => \Shieldon\Firewall\Integration\Laravel::class,
Adicione a seguinte rota ao seu arquivo routes/web.php
:
Route::any('/firewall/panel/{path?}', function() {
$panel = new \Shieldon\Firewall\Panel();
$panel->csrf(['_token' => csrf_token()]);
$panel->entry();
})->where('path', '(.*)');
O Firewall Shieldon começará a monitorar seu website se estiver habilitado na seção de configurações do Daemon
. Certifique-se de ter configurado corretamente as configurações.