Comment puis-je empêcher la falsification de requêtes intersites avec Perl et Apache?

Existe-t-il une bibliothèque transparente que je peux utiliser ou quelque chose de facile pour éviter la falsification de requêtes intersites avec Perl et Apache? Comment puis-je générer des jetons pour les formulaires et les valider côté serveur?

Pour vous protéger contre la “falsification de requêtes inter-sites” côté serveur, il est préférable de:

  1. Utilisez la fuite HTML. Si vous utilisez un système de template tel que Template Toolkit, vous devez utiliser ses capacités d’échappement. Si vous utilisez CGI.pm, il a “escapeHTML” pour le faire.
  2. Limitez la durée de vie des cookies de session à des périodes relativement courtes. Pour CGI :: Session, cela peut être fait avec $ session-> expire ($ time).
  3. Vérifiez le référent lors de la sortie de pages vulnérables.
  4. Ne pas utiliser / accepter la requête GET pour modifier les données.

Faire cela est spécifique au cadre mais simple.

Regardez ce que fait CGI :: Application :: Plugin :: ProtectCSRF . Ce module est pour le framework CGI :: Application.

Il ne devrait pas être trop difficile de modifier le module pour d’autres frameworks. Fondamentalement, les formulaires utilisateur obtiennent un champ HTML masqué avec le jeton généré et l’object de session reçoit le même jeton. Lorsque le formulaire est soumis, le jeton soumis au formulaire est comparé au jeton dans l’object de session (qui se trouve sur le serveur). S’ils ne correspondent pas, un CSRF s’est probablement produit.

Il y a aussi un plugin Catalyst : Catalyst :: Controller :: RequestToken

Ces modules utilisent des gestionnaires d’atsortingbuts, de sorte qu’il y a très peu de modifications à apporter à votre application existante.