CakePHP - Seguridad

La seguridad es otra característica importante al crear aplicaciones web. Asegura a los usuarios del sitio web que sus datos están protegidos. CakePHP proporciona algunas herramientas para proteger su aplicación.

Cifrado y descifrado

La biblioteca de seguridad en CakePHP proporciona métodos mediante los cuales podemos cifrar y descifrar datos. A continuación se muestran los dos métodos, que se utilizan para el mismo propósito.

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

El método de cifrado tomará el texto y la clave como argumento para cifrar los datos y el valor de retorno será el valor cifrado con la suma de comprobación HMAC.

Para codificar un dato, hash()se utiliza el método. A continuación se muestra la sintaxis del método hash ().

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

CSRF

CSRF significa Cross Site Request Forgery. Al habilitar el componente CSRF, obtiene protección contra ataques. CSRF es una vulnerabilidad común en aplicaciones web.

Permite a un atacante capturar y reproducir una solicitud anterior y, a veces, enviar solicitudes de datos utilizando etiquetas de imagen o recursos en otros dominios. El CSRF se puede habilitar simplemente agregando elCsrfComponent a su matriz de componentes como se muestra a continuación -

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

El CsrfComponent se integra perfectamente con FormHelper. Cada vez que crea un formulario con FormHelper, insertará un campo oculto que contiene el token CSRF.

Si bien esto no se recomienda, es posible que desee deshabilitar CsrfComponent en ciertas solicitudes. Puede hacerlo utilizando el despachador de eventos del controlador, durante elbeforeFilter() método.

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

Componente de seguridad

Security Component aplica una seguridad más estricta a su aplicación. Proporciona métodos para varias tareas como:

  • Restricting which HTTP methods your application accepts- Siempre debe verificar el método HTTP que se está utilizando antes de ejecutar efectos secundarios. Debe verificar el método HTTP o usarCake\Network\Request::allowMethod() para asegurarse de que se utiliza el método HTTP correcto.

  • Form tampering protection- De forma predeterminada, SecurityComponent evita que los usuarios manipulen formularios de formas específicas. SecurityComponent evitará las siguientes cosas:

    • Los campos desconocidos no se pueden agregar al formulario.

    • Los campos no se pueden eliminar del formulario.

    • Los valores de las entradas ocultas no se pueden modificar.

  • Requiring that SSL be used - Todas las acciones para requerir un seguro SSL

  • Limiting cross controller communication- Podemos restringir qué controlador puede enviar solicitudes a este controlador. También podemos restringir qué acciones pueden enviar solicitudes a la acción de este controlador.

Ejemplo

Realice cambios en el config/routes.php archivo como se muestra en el siguiente programa.

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();
});

Crear un LoginsController.php archivar en src/Controller/LoginsController.php. Copie el siguiente código en el archivo del 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(){
      }
   }
?>

Crea un directorio Logins a src/Template y bajo ese directorio crea un Viewarchivo llamado index.php. Copie el siguiente código en ese archivo.

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();
?>

Ejecute el ejemplo anterior visitando la siguiente URL: http: // localhost / cakephp4 / login

Salida

Tras la ejecución, recibirá el siguiente resultado.