CakePHP - Segurança

A segurança é outro recurso importante durante a construção de aplicativos da web. Ele garante aos usuários do site que seus dados estão protegidos. O CakePHP fornece algumas ferramentas para proteger seu aplicativo.

Criptografia e descriptografia

A biblioteca de segurança do CakePHP fornece métodos pelos quais podemos criptografar e descriptografar dados. A seguir estão os dois métodos, que são usados ​​para o mesmo propósito.

static Cake\Utility\Security::encrypt($text, $key, $hmacSalt = null)
static Cake\Utility\Security::decrypt($cipher, $key, $hmacSalt = null)

O método de criptografia terá texto e chave como argumento para criptografar dados e o valor de retorno será o valor criptografado com soma de verificação HMAC.

Para hash de dados, hash()método é usado. A seguir está a sintaxe do método hash ().

static Cake\Utility\Security::hash($string, $type = NULL, $salt = false)

CSRF

CSRF significa Cross Site Request Forgery. Ao habilitar o componente CSRF, você obtém proteção contra ataques. CSRF é uma vulnerabilidade comum em aplicativos da web.

Ele permite que um invasor capture e reproduza uma solicitação anterior e, às vezes, envie solicitações de dados usando marcas de imagem ou recursos em outros domínios. O CSRF pode ser habilitado simplesmente adicionando oCsrfComponent à sua matriz de componentes, conforme mostrado abaixo -

public function initialize(): void {
   parent::initialize();
   $this->loadComponent('Csrf');
}

O CsrfComponent se integra perfeitamente com FormHelper. Cada vez que você cria um formulário com FormHelper, ele insere um campo oculto contendo o token CSRF.

Embora isso não seja recomendado, você pode desabilitar o CsrfComponent em certas solicitações. Você pode fazer isso usando o despachante de eventos do controlador, durante obeforeFilter() método.

public function beforeFilter(Event $event) {
   $this->eventManager()->off($this->Csrf);
}

Componente de Segurança

O componente de segurança aplica uma segurança mais rígida ao seu aplicativo. Ele fornece métodos para várias tarefas como -

  • Restricting which HTTP methods your application accepts- Você deve sempre verificar o método HTTP, sendo usado antes de executar efeitos colaterais. Você deve verificar o método HTTP ou usarCake\Network\Request::allowMethod() para garantir que o método HTTP correto seja usado.

  • Form tampering protection- Por padrão, o SecurityComponent impede que os usuários adulterem formulários de maneiras específicas. O SecurityComponent impedirá o seguinte -

    • Campos desconhecidos não podem ser adicionados ao formulário.

    • Os campos não podem ser removidos do formulário.

    • Os valores nas entradas ocultas não podem ser modificados.

  • Requiring that SSL be used - Todas as ações que exigem um SSL protegido

  • Limiting cross controller communication- Podemos restringir qual controlador pode enviar solicitação a este controlador. Também podemos restringir quais ações podem enviar solicitação para a ação deste controlador.

Exemplo

Faça alterações no config/routes.php arquivo conforme mostrado no programa a seguir.

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf');
   //$builder->connect('/pages',
      ['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('login',['controller'=>'Logins','action'=>'index']);
   $builder->fallbacks();
});

Criar uma LoginsController.php arquivo em src/Controller/LoginsController.php. Copie o seguinte código no arquivo do controlador.

src/Controller/LoginsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   class LoginsController extends AppController {
      public function initialize() : void {
         parent::initialize();
         $this->loadComponent('Security');
      }
         public function index(){
      }
   }
?>

Crie um diretório Logins em src/Template e sob esse diretório crie um Viewarquivo chamado index.php. Copie o código a seguir nesse arquivo.

src/Template/Logins/index.php

<?php
   echo $this->Form->create(NULL,array('url'=>'/login'));
   echo $this->Form->control('username');
   echo $this->Form->control('password');
   echo $this->Form->button('Submit');
   echo $this->Form->end();
?>

Execute o exemplo acima visitando a seguinte URL - http: // localhost / cakephp4 / login

Resultado

Após a execução, você receberá a seguinte saída.