Maison > développement back-end > Problème PHP > Protection PHP CSRF: comment empêcher les attaques du CSRF.

Protection PHP CSRF: comment empêcher les attaques du CSRF.

James Robert Taylor
Libérer: 2025-03-25 15:05:46
original
833 Les gens l'ont consulté

Protection PHP CSRF: comment empêcher les attaques du CSRF

Les attaques de contrefaçon de demande de site transversal (CSRF) peuvent être particulièrement dangereuses car elles incitent les utilisateurs à effectuer des actions involontaires sur une application Web qui leur fait confiance. Pour éviter les attaques du CSRF en PHP, vous pouvez suivre ces stratégies:

  1. Utilisez les jetons CSRF : générez un jeton unique pour chaque session utilisateur et incluez ce jeton sous chaque forme qui déclenche une opération de changement d'État. Le jeton doit être vérifié sur le serveur avant de traiter la demande.
  2. Cookies de même site : Utilisez l'attribut SameSite pour les cookies. La définition SameSite sur Strict ou Lax peut aider à prévenir le CSRF en s'assurant que les cookies ne sont pas envoyés avec des demandes d'origine croisée.
  3. Cookie à double soumitte : Cette méthode implique l'envoi du jeton CSRF dans un cookie et comme paramètre de demande. Le serveur vérifie alors que les valeurs de jeton correspondent.
  4. Vérifier l'en-tête du référentiel : Bien que non infaillible, la vérification de l'en-tête du référence peut fournir une couche de protection supplémentaire. Assurez-vous que la demande provient de votre propre domaine.
  5. Évitez d'utiliser des opérations GET pour le changement d'état : utilisez la publication pour les opérations qui modifient l'état du serveur, car les demandes GET peuvent être facilement déclenchées à partir d'autres sites.
  6. Mettre en œuvre une gestion appropriée de session : assurez-vous que les sessions sont correctement gérées et que les cookies sont définis avec des indicateurs de sécurité appropriés comme HttpOnly et Secure .

En mettant en œuvre ces mesures, vous pouvez réduire considérablement le risque d'attaques CSRF contre votre application PHP.

Quelles sont les meilleures pratiques pour la mise en œuvre de jetons CSRF dans PHP?

La mise en œuvre des jetons CSRF efficacement dans PHP implique plusieurs meilleures pratiques:

  1. Générez des jetons uniques : utilisez une méthode cryptographiquement sécurisée pour générer des jetons. Les fonctions random_bytes et bin2hex de PHP peuvent être utilisées pour créer un jeton sécurisé.

     <code class="php">$token = bin2hex(random_bytes(32));</code>
    Copier après la connexion
  2. Conservez les jetons en toute sécurité : stockez le jeton dans la session de l'utilisateur ou en tant que cookie. Si vous utilisez une session, assurez-vous que les attaques de fixation de session sont empêchées.

     <code class="php">session_start(); $_SESSION['csrf_token'] = $token;</code>
    Copier après la connexion
  3. Inclure le jeton sous forme : intégrer le jeton sous forme sous forme de champ de saisie caché.

     <code class="php"><input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($token); ?>"></code>
    Copier après la connexion
  4. Valider les jetons sur la soumission : vérifiez le jeton sur la soumission de formulaire par rapport à la valeur stockée.
  5. Régénérer les jetons : envisagez de régénérer les jetons après des soumissions de formulaires réussies ou après une certaine période pour réduire la fenêtre d'attaque.
  6. Utilisez le jeton dans toutes les demandes de changement d'état : incluez les jetons CSRF dans toutes les demandes qui modifient l'état du serveur, pas seulement les soumissions de formulaires traditionnelles mais également les appels AJAX.
  7. Évitez les jetons prévisibles : assurez-vous que les jetons ne sont pas prévisibles ou devignables par un attaquant.

Suivre ces pratiques vous aidera à maintenir l'intégrité de votre mécanisme de protection CSRF.

Pouvez-vous recommander des bibliothèques PHP pour la protection du CSRF?

Plusieurs bibliothèques PHP peuvent simplifier la mise en œuvre de la protection du CSRF:

  1. OWASP CSRFGUARD PHP : Une bibliothèque du projet Open Web Application Security Project (OWASP) conçu spécifiquement pour la protection CSRF. Il offre des mécanismes robustes pour la génération, la validation et l'intégration des jetons avec divers cadres.
  2. Symfony Security : Si vous utilisez le cadre Symfony, il est livré avec une protection CSRF intégrée. Les classes CsrfExtension et CsrfTokenManager fournissent un soutien complet à la génération et à la validation des jetons CSRF.
  3. Laravel : La protection du CSRF de Laravel est simple à mettre en œuvre. Le cadre génère automatiquement un jeton CSRF pour chaque session utilisateur active, et il est inclus dans les formulaires via la directive Blade @csrf .
  4. Zend Framework : Zend Framework offre une protection CSRF via son composant Zend\Validator\Csrf , qui peut être facilement intégré dans les formulaires.
  5. Aura.web : une bibliothèque légère offrant une génération et une validation de jetons CSRF, adaptées à une utilisation avec n'importe quel projet PHP.

L'utilisation de l'une de ces bibliothèques peut gagner du temps de développement et garantir une protection robuste du CSRF dans votre application.

Comment valider les jetons CSRF sur les soumissions de formulaires en PHP?

La validation des jetons CSRF sur les soumissions de formulaires en PHP consiste à comparer le jeton envoyé avec le formulaire à celui stocké dans la session ou le cookie. Voici un guide étape par étape:

  1. Récupérez le jeton stocké : accédez au jeton stocké dans la session ou le cookie.

     <code class="php">session_start(); $storedToken = $_SESSION['csrf_token'];</code>
    Copier après la connexion
  2. Récupérez le jeton soumis : Obtenez le jeton envoyé avec la soumission du formulaire.

     <code class="php">$submittedToken = $_POST['csrf_token'];</code>
    Copier après la connexion
  3. Validez le jeton : comparez le jeton stocké avec le jeton soumis.

     <code class="php">if (!hash_equals($storedToken, $submittedToken)) { // Token mismatch, handle the error http_response_code(403); die("CSRF token validation failed"); }</code>
    Copier après la connexion
  4. Procédez avec la demande : si les jetons correspondent, procédez au traitement des données du formulaire.

     <code class="php">// Tokens match, proceed with the form submission // Process the form data here</code>
    Copier après la connexion
  5. Régénérer le jeton : éventuellement, régénérez le jeton après une soumission réussie pour améliorer la sécurité.

     <code class="php">$newToken = bin2hex(random_bytes(32)); $_SESSION['csrf_token'] = $newToken;</code>
    Copier après la connexion

En suivant ces étapes, vous pouvez vous assurer que les jetons CSRF sont correctement validés, protégeant ainsi votre application contre les attaques CSRF.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal