CodeIgniter

CodeIgniter é um framework MVC leve. Vou discutir primeiro o CodeIgniter 3, já que sua versão 4 possui diferenças significativas em relação às versões anteriores.

Neste guia, vou compartilhar algumas dicas para implementar o Firewall Shieldon em sua aplicação CodeIgniter.

Firewall no Framework CodeIgniter

Instalação

Use o Composer PHP:

composer require shieldon/shieldon

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

  • shieldon/psr-http A implementação completa da 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 outros.

Implementação

  • CodeIgniter 3
  • CodeIgniter 4

CodeIgniter 3

O CodeIgniter 3 possui um controlador central chamado CI_Controller que lida com seu padrão arquitetural MVC (Model-View-Controller).

Recomendo criar um controlador pai chamado MY_Controller na pasta core e adicionar o código inicial a ele.

1. MY_Controller

Vamos criar um arquivo chamado MY_Controller.php na pasta core.

class MY_Controller extends CI_Controller
{
    /**
     * Construtor.
     */
    public function __construct()
    {
        parent::__construct();
    }
}

2. Inicializando a Instância do Firewall

Coloque o código inicial no construtor para que qualquer controlador que estenda o MY_Controller tenha o Firewall Shieldon inicializado e o método $this->firewall() disponível.

class MY_Controller extends CI_Controller
{
    /**
     * Construtor.
     */
    public function __construct()
    {
        parent::__construct();

        // Autoloader do Composer
        require_once APPPATH . '../vendor/autoload.php';

        // Este diretório deve ter permissão de escrita.
        $storage = APPPATH . 'cache/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);
        }
    }

    /**
     * Proteção do Firewall Shieldon.
     */
    public function firewall()
    {
        $firewall = \Shieldon\Container::get('firewall');
        $firewall->run();
    }
}

Lembrete

Para segurança ideal, tanto a pasta do sistema quanto a pasta da aplicação devem estar acima da raiz do site, para que não sejam acessíveis diretamente pelo navegador.

Se a pasta da aplicação estiver no mesmo nível do index.php, mova o diretório $storage para um local seguro. Por exemplo:

$storage = APPPATH . '../shieldon';

3. Definindo um Controlador para o Painel de Controle

Precisamos de um controlador para acessar o painel de controle do Firewall Shieldon. Neste exemplo, vamos definir um controlador chamado Firewall.

class Firewall extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Esta é a entrada do nosso Painel de Firewall.
     */
    public function panel()
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->entry();
    }
}

Agora, você pode acessar o Painel de Firewall usando a seguinte URL:

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

CodeIgniter 4

1. Registrar um Filtro

No arquivo app/Config/Filters.php, adicione o seguinte código à propriedade $aliases:

'firewall' => \Shieldon\Firewall\Intergration\CodeIgniter4::class,

Em seguida, adicione a string firewall à propriedade $globals, dentro do array before:

public $globals = [
    'before' => [
        'firewall'
    ],
];

2. Definindo um Controlador para o Painel de Firewall

<?php 

namespace App\Controllers;

class Firewall extends BaseController
{
    public function panel()
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->csrf([csrf_token() => csrf_hash()]);
        $panel->entry();
    }
}

É isso!

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

Painel de Controle

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ção Daemon, ele começará a monitorar seu site. Verifique se você configurou corretamente as configurações.