Slim

O framework Slim é um dos meus favoritos. Como o Slim é um micro-framework, a implementação do Firewall Shieldon também é fácil. Sem mais delongas, vamos começar.

Firewall no Framework Slim

Instalação

Use o PHP Composer:

composer require shieldon/shieldon

Isso também 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 abrangentes.
  • shieldon/event-dispatcher O despachante de eventos mais simples.
  • shieldon/web-security Uma coleção de funções relacionadas à segurança 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 outros.

Implementando

Slim 4

(1) Crie um Middleware de Firewall.

Você pode criar um middleware por conta própria ou simplesmente usar a classe de integração.

Exemplo:

class FirewallMiddleware
{
    /**
     * Classe de invocação de middleware de exemplo
     *
     * @param ServerRequest  $request Requisição PSR-7
     * @param RequestHandler $handler Manipulador de requisições PSR-15
     *
     * @return Response
     */
    public function __invoke(Request $request, RequestHandler $handler): Response
    {
        $response = $handler->handle($request);

        $firewall = new \Shieldon\Firewall\Firewall($request, $response);

        // O diretório onde o Firewall Shieldon colocará seus arquivos.
        $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');
        $response = $firewall->run();

        if ($response->getStatusCode() !== 200) {
            $httpResolver = new \Shieldon\Firewall\HttpResolver();
            $httpResolver($response);
        }

        return $response;
    }
}

(2) Adicione o Middleware de Firewall em sua aplicação.

Por exemplo, se você estiver usando o framework Slim 4, o código deve ser assim.

Exemplo:

$app->add(new FirewallMiddleware());

Ou, se você preferir usar a classe de integração, aqui está o código.

Exemplo:

$app->add(new \Shieldon\Firewall\Integration\Slim4);

(3) Crie uma Rota para o Painel de Controle.

Por exemplo, se você estiver usando o framework Slim 4, o código deve ser assim. Em seguida, você pode acessar a URL https://seusite.com/firewall/panel/ para fazer login no painel de controle.

Exemplo:

$app->any('/firewall/panel[/{params:.*}]', function (Request $request, Response $response, $args) {

$firewall = new \Shieldon\Firewall\Firewall($request);

    // O diretório onde o Firewall Shieldon colocará seus arquivos.
    // Deve ser o mesmo que o firewallMiddleware.
    $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');

    // A URL base para o painel de controle.
    $firewall->controlPanel('/firewall/panel/');

    $panel = new \Shieldon\Firewall\Panel();

    // Começar - Configure os campos CSRF se você tiver ativado o Slim-CSRF

    $csrf = new \Slim\Csrf\Guard();
    $nameKey = $csrf->getTokenNameKey();
    $valueKey = $csrf->getTokenValueKey();

    $csrfName = $request->getAttribute('csrf_name');
    $csrfVale = $request->getAttribute('csrf_value');

    $panel->csrf(
        [$nameKey => $csrfName],
        [$valueKey => $csrfVale]
    );

    // Fim - Slim-CSRF

    $panel->entry();
});

Observação:

  • Os métodos HTTP POST e GET devem ser aplicados ao seu site.
  • O método POST é necessário para resolver o CAPTCHA pelos usuários que foram temporariamente bloqueados.

Isso é tudo.

Slim 3

(1) Adicione o Middleware de Firewall em sua aplicação.

O Shieldon possui uma classe de integração pronta para este middleware, basta usá-la seguindo as etapas a seguir.

Exemplo:

$app->add(new \Shieldon\Firewall\Integration\Slim3);

Por exemplo, se você estiver usando o esqueleto do Slim3, o código em middleware.php ficará assim:

Exemplo:

<?php

use Slim\App;

return function (App $app) {
    $app->add(new \Shieldon\Firewall\Integration\Slim3);
    $app->add(new \Slim\Csrf\Guard);
};

(2) Crie uma Rota para o Painel de Controle.

Por exemplo, se você estiver usando o framework Slim 4, o código deve ser assim. Em seguida, você pode acessar a URL https://seusite.com/firewall/panel/ para fazer login no painel de controle.

Exemplo:

$app->map(['GET', 'POST'], '/firewall/panel[/{params:.*}]', function (Request $request, Response $response, array $args) {

    $firewall = new \Shieldon\Firewall\Firewall($request);

    // O diretório onde o Firewall Shieldon colocará seus arquivos.
    // Deve ser o mesmo que o firewallMiddleware.
    $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');

    // A URL base para o painel de controle.
    $firewall->controlPanel('/firewall/panel/');

    $panel = new \Shieldon\Firewall\Panel();

    // Começar - Configure os campos CSRF se você tiver ativado o Slim-CSRF

    $csrf = new \Slim\Csrf\Guard();
    $nameKey = $csrf->getTokenNameKey();
    $valueKey = $csrf->getTokenValueKey();

    $csrfName = $request->getAttribute('csrf_name');
    $csrfVale = $request->getAttribute('csrf_value');

    $panel->csrf(
        [$nameKey => $csrfName],
        [$valueKey => $csrfVale]
    );

    // Fim - Slim-CSRF

    $panel->entry();
});

Isso é tudo.

Painel de Controle

Você pode acessar o Painel de Firewall pelo /firewall/panel/, para visualizar a página, acesse esta URL em seu navegador.

https://seusite.com/firewall/panel/

O login padrão é shieldon_user e a senha é shieldon_pass. Após fazer login no Painel de Firewall, a primeira coisa que você deve fazer é alterar o login e a senha.

Se o Firewall Shieldon estiver habilitado na seção de configurações do Daemon, ele começará a monitorar seu site. Certifique-se de configurar corretamente as configurações.