Laravel

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.

Firewall no Framework Laravel

Instalação

Use o Composer PHP:

composer require shieldon/shieldon

Isso também irá instalar as dependências necessárias para o Shieldon:

  • shieldon/psr-http A implementação PSR-7, 15, 17 com documentação completa e testes extensivos.
  • shieldon/event-dispatcher O despachante de eventos mais simples.
  • shieldon/web-security Uma coleção de funções relacionadas à segurança da web.
  • shieldon/messenger Uma coleção de módulos para enviar mensagens para APIs ou serviços de terceiros, como Telegram, Line, RocketChat, Slack, SendGrid, MailGun e mais.

Implementação

Você pode usar o Shieldon como um middleware ou implementar o Shieldon na fase de inicialização da sua aplicação web.

Fase de Inicialização

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.

(1) Antes de Inicializar o $app

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);
    }
}

(2) Definir uma Rota para o Painel do Firewall

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.

Middleware

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.

1. Definir um Middleware

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);
    }
}

2. Registrar o Alias do Middleware

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,

3. Definir uma Rota para o Painel do Firewall

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.