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.