Este guia abrangente fornece uma visão detalhada de como começar com o Firewall Shieldon para sua aplicação web. Vamos detalhar.
Antes de usar o Firewall Shieldon, verifique se o seu servidor atende aos seguintes requisitos:
Extensão PHP - Extensão PHP GD *(Necessária para gerar imagens de códigos de verificação Captcha.)
O Shieldon pode ser instalado via Composer para PHP:
composer require shieldon/shieldon
Existem três formas principais de implementar o Shieldon em sua aplicação:
Cada método de implementação é acompanhado de exemplos práticos usando frameworks populares como Slim 4, Laravel 6 e CodeIgniter 3.
Exemplo: Framework Slim 4
O Shieldon pode ser usado como um middleware PSR-15, conforme mostrado no exemplo usando o framework Slim 4.
class FirewallMiddleware
{
/**
* Classe invocável do middleware de exemplo
*
* @param ServerRequest $request Requisição PSR-7
* @param RequestHandler $handler Manipulador de requisição 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 em que o Firewall Shieldon irá armazenar seus arquivos.
$firewall->configure(__DIR__ . '/../cache/shieldon_firewall');
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
return $response;
}
}
Por exemplo, se você estiver usando o framework Slim 4, o código deve ser assim.
$app->add(new FirewallMiddleware());
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.
$app->any('/firewall/panel[/{params:.*}]', function (Request $request, Response $response, $args) {
$firewall = new \Shieldon\Firewall\Firewall($request, $response);
// O diretório em que o Firewall Shieldon irá armazenar seus arquivos.
// Deve ser o mesmo do FirewallMiddleware.
$firewall->configure(__DIR__ . '/../cache/shieldon_firewall');
$panel = new \Shieldon\Firewall\Panel();
// A URL base para o painel de controle.
$panel->entry('/firewall/panel/');
});
Nota:
POST
e GET
devem ser aplicados ao seu site.POST
é necessário para resolver o CAPTCHA pelos usuários que foram temporariamente bloqueados.Exemplo: Framework Laravel 6
Você pode inicializar o Shieldon na fase de inicialização da sua aplicação, como mostrado no exemplo usando o framework Laravel 6.
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 solicitações HTTP que chegam ao seu site.
| Executar o Firewall Shieldon antes de inicializar o Laravel 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.
// Colocamos em um diretório `storage/shieldon_firewall`.
$storage = __DIR__ . '/../storage/shieldon_firewall';
$firewall = new \Shieldon\Firewall\Firewall();
$firewall->configure($storage);
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
}
Route::any('/firewall/panel/{path?}', function() {
$panel = new \Shieldon\Firewall\Panel();
$panel->csrf(['_token' => csrf_token()]);
// O ponto de entrada deve ser o mesmo da rota definida.
$panel->entry('/firewall/panel/');
})->where('path', '(.*)');
Exemplo: Framework CodeIgniter 3
O Shieldon também pode ser implementado em um controlador pai que é estendido por outros controladores, como demonstrado no exemplo usando o framework CodeIgniter 3.
Crie um novo arquivo MY_Controller.php
no diretório application/core/
. Este será o seu controlador pai.
Aqui está a estrutura básica do MY_Controller
:
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
}
Em seguida, inicialize o Firewall Shieldon no construtor do MY_Controller
. Isso garantirá que o Firewall Shieldon seja inicializado para todos os controladores que estendem o MY_Controller
.
class MY_Controller extends CI_Controller
{
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);
$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();
}
}
Em seguida, você precisa definir um controlador para o painel de controle do Firewall Shieldon. Neste exemplo, você criará um controlador chamado Firewall
.
Crie um novo arquivo Firewall.php no diretório application/controllers/
e adicione o seguinte código:
class Firewall extends MY_Controller
{
public function __construct()
{
parent::__construct();
}
/**
* Este é o ponto de entrada para o nosso painel de controle do Firewall.
*/
public function panel()
{
$panel = new \Shieldon\Firewall\Panel();
$panel->entry('/firewall/panel/');
}
}
Agora, o Firewall Shieldon é inicializado no seu MY_Controller
, e todos os controladores que estendem o MY_Controller
e executam o método firewall
terão acesso a ele. Além disso, você definiu um controlador Firewall com um método panel, que é o ponto de entrada para o painel de controle do Firewall Shieldon.
Por fim, independentemente do método de implementação escolhido, acessar https://yoursite.com/firewall/panel/
deve exibir a página de login.
O nome de usuário e a senha padrão são shieldon_user
e shieldon_pass
, respectivamente. Por motivos de segurança, é altamente recomendável alterar as credenciais de login após o primeiro acesso.