CakePHP - Sécurité

La sécurité est une autre caractéristique importante lors de la création d'applications Web. Il assure aux utilisateurs du site Web que leurs données sont sécurisées. CakePHP fournit quelques outils pour sécuriser votre application.

Cryptage et décryptage

La bibliothèque de sécurité de CakePHP fournit des méthodes par lesquelles nous pouvons crypter et décrypter les données. Voici les deux méthodes, qui sont utilisées dans le même but.

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

La méthode de chiffrement prendra le texte et la clé comme argument pour chiffrer les données et la valeur de retour sera la valeur chiffrée avec la somme de contrôle HMAC.

Pour hacher une donnée, hash()méthode est utilisée. Voici la syntaxe de la méthode hash ().

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

CSRF

CSRF signifie Cross Site Request Forgery. En activant le composant CSRF, vous bénéficiez d'une protection contre les attaques. CSRF est une vulnérabilité courante dans les applications Web.

Il permet à un attaquant de capturer et de rejouer une demande précédente, et parfois de soumettre des demandes de données à l'aide de balises d'image ou de ressources sur d'autres domaines. Le CSRF peut être activé en ajoutant simplement leCsrfComponent à votre tableau de composants comme indiqué ci-dessous -

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

Le CsrfComponent s'intègre parfaitement avec FormHelper. Chaque fois que vous créez un formulaire avec FormHelper, il insère un champ masqué contenant le jeton CSRF.

Bien que cela ne soit pas recommandé, vous souhaiterez peut-être désactiver le CsrfComponent sur certaines demandes. Vous pouvez le faire en utilisant le répartiteur d'événements du contrôleur, pendant labeforeFilter() méthode.

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

Composant de sécurité

Security Component applique une sécurité plus stricte à votre application. Il fournit des méthodes pour diverses tâches telles que -

  • Restricting which HTTP methods your application accepts- Vous devez toujours vérifier la méthode HTTP utilisée avant d'exécuter les effets secondaires. Vous devriez vérifier la méthode HTTP ou utiliserCake\Network\Request::allowMethod() pour vous assurer que la méthode HTTP correcte est utilisée.

  • Form tampering protection- Par défaut, SecurityComponent empêche les utilisateurs de falsifier les formulaires de manière spécifique. Le SecurityComponent empêchera les choses suivantes -

    • Les champs inconnus ne peuvent pas être ajoutés au formulaire.

    • Les champs ne peuvent pas être supprimés du formulaire.

    • Les valeurs des entrées masquées ne peuvent pas être modifiées.

  • Requiring that SSL be used - Toutes les actions nécessitent un SSL sécurisé

  • Limiting cross controller communication- Nous pouvons restreindre le contrôleur qui peut envoyer une demande à ce contrôleur. Nous pouvons également restreindre les actions pouvant envoyer une requête à l'action de ce contrôleur.

Exemple

Apportez des modifications au config/routes.php fichier comme indiqué dans le programme suivant.

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

Créer un LoginsController.php déposer à src/Controller/LoginsController.php. Copiez le code suivant dans le fichier du contrôleur.

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(){
      }
   }
?>

Créer un annuaire Logins à src/Template et sous ce répertoire, créez un Viewfichier appelé index.php. Copiez le code suivant dans ce fichier.

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

Exécutez l'exemple ci-dessus en visitant l'URL suivante - http: // localhost / cakephp4 / login

Production

Lors de l'exécution, vous recevrez la sortie suivante.