Zend

O Zend Framework oficialmente fornece dois tipos de esqueletos: Zend MVC e Zend Expressive.

Não importa qual esqueleto você esteja usando, este guia pode fornecer algumas ideias sobre como implementar o Firewall Shieldon. Por favor, note que não tenho certeza de qual método é considerado a melhor prática no Zend, então você pode escolher o método que preferir.

Firewall no Zend Framework

Instalação

Use o Composer do PHP:

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 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 envio de mensagens para APIs ou serviços de terceiros, como Telegram, Line, RocketChat, Slack, SendGrid, MailGun e outros.

Implementação

Zend Expressive

Este é um exemplo que mostra como usar um Middleware PSR-15 no esqueleto Zend Expressive.

1. Registrar um Middleware.

Existe uma classe de integração pronta para o Zend Expressive.

Em seu pipeline.php, adicione esta linha:

Exemplo:

$app->pipe(\Shieldon\Firewall\Integration\ZendPsr15:class);

2. Definir um Handler

Vá para o diretório App/src/Handler e crie um arquivo PHP chamado FirewallPanelHandler.

Copie o texto abaixo e cole no arquivo.

Exemplo:

<?php

declare(strict_types=1);

namespace App\Handler;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Zend\Diactoros\Response;

/**
 * Firewall Panel Handler
 * Se você tiver o CSRF habilitado, certifique-se de passar o token CSRF para o painel de controle.
 */
class FirewallPanelHandler implements RequestHandlerInterface
{
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->entry();

        return new Response();
    }
}

3. Definir uma Rota para o Painel do Firewall

Em seu route.php, adicione esta linha:

Exemplo:


// Início - Firewall Shieldon

$app->route('/firewall/panel/', App\Handler\FirewallPanelHandler::class, ['GET', 'POST']);

foreach(\Shieldon\Firewall\Panel::getRoutes() as $route) {
    $app->route("/firewall/panel/$route/", App\Handler\FirewallPanelHandler::class, ['GET', 'POST']);
}

// Fim - Firewall Shieldon

Isso é tudo.

Zend MVC

Não tenho certeza qual versão do Zend Framework você está usando, então fornecerei instruções que funcionam com a maioria das versões do Zend.

1. Antes de Inicializar o Core

Em seu public/index.php, logo abaixo desta linha:

include __DIR__ . '/../vendor/autoload.php';

Adicione o seguinte código:

/*
|--------------------------------------------------------------------------
| Executar o Firewall Shieldon
|--------------------------------------------------------------------------
|
| O Firewall Shieldon irá monitorar todas as solicitações HTTP que chegam ao seu site.
|
*/
if (isset($_SERVER['REQUEST_URI'])) {

    // Este diretório deve ter permissão de escrita.
    $storage = dirname($_SERVER['SCRIPT_FILENAME']) . '/../shieldon_firewall';

    $firewall = new \Shieldon\Firewall\Firewall();
    $firewall->configure($storage);
    $firewall->controlPanel('/firewall/panel');
    $response = $firewall->run();

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

O próximo passo é criar um controlador para o painel de controle.

2. Definir um Controlador

Vamos criar um controlador chamado FirewallController.

<?php

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;

class FirewallController extends AbstractActionController
{
    /**
     * O ponto de entrada do Painel do Firewall.
     */
    public function panelAction()
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->entry();
    }
}

3. Definir uma Rota para o Painel do Firewall

Abra o arquivo module.config.php localizado em:

module/Application/config/module.config.php

(3-1) Dentro do array ['router']['routes'], adicione o seguinte código:

Exemplo:

'firewallpanel' => [
    'type' => Segment::class,
    'options' => [
        'route'    => '/firewall/panel[:slug]',
        'constraints' => [
            'slug' => '[a-zA-Z0-9\/]*',
        ],
        'defaults' => [
            'controller' => Controller\FirewallController::class,
            'action'     => 'panel',
        ],
    ],
],

(3-2) Dentro do array ['controllers']['factories'], adicione o seguinte código:

Controller\FirewallController::class => InvokableFactory::class,

Isso é tudo.

Painel de Controle

Você pode acessar o Painel de Firewall visitando /firewall/panel/. Para ver a página, vá para 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 ter configurado corretamente as configurações.