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:
- 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.
- Cookies de même site : Utilisez l'attribut
SameSite
pour les cookies. La définitionSameSite
surStrict
ouLax
peut aider à prévenir le CSRF en s'assurant que les cookies ne sont pas envoyés avec des demandes d'origine croisée. - 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.
- 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.
- É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.
- 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
etSecure
.
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:
-
Générez des jetons uniques : utilisez une méthode cryptographiquement sécurisée pour générer des jetons. Les fonctions
random_bytes
etbin2hex
de PHP peuvent être utilisées pour créer un jeton sécurisé.<code class="php">$token = bin2hex(random_bytes(32));</code>
-
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>
-
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>
- Valider les jetons sur la soumission : vérifiez le jeton sur la soumission de formulaire par rapport à la valeur stockée.
- 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.
- 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.
- É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:
- 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.
- Symfony Security : Si vous utilisez le cadre Symfony, il est livré avec une protection CSRF intégrée. Les classes
CsrfExtension
etCsrfTokenManager
fournissent un soutien complet à la génération et à la validation des jetons CSRF. - 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
. - Zend Framework : Zend Framework offre une protection CSRF via son composant
Zend\Validator\Csrf
, qui peut être facilement intégré dans les formulaires. - 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:
-
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>
-
Récupérez le jeton soumis : Obtenez le jeton envoyé avec la soumission du formulaire.
<code class="php">$submittedToken = $_POST['csrf_token'];</code>
-
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>
-
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>
-
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>
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!

Cet article détaille la mise en œuvre des files d'attente de messages en PHP à l'aide de RabbitMQ et Redis. Il compare leurs architectures (AMQP vs en mémoire), les fonctionnalités et les mécanismes de fiabilité (confirmations, transactions, persistance). Meilleures pratiques de conception, erreur

Cet article examine les normes de codage PHP actuelles et les meilleures pratiques, en se concentrant sur les recommandations PSR (PSR-1, PSR-2, PSR-4, PSR-12). Il met l'accent

Cet article détaille l'installation et le dépannage des extensions de PHP, en se concentrant sur PECL. Il couvre les étapes d'installation (trouver, télécharger / compilation, activer, redémarrer le serveur), dépannage des techniques (vérification des journaux, vérification de l'installation,

Cet article explique l'API de réflexion de PHP, permettant l'inspection d'exécution et la manipulation des classes, des méthodes et des propriétés. Il détaille les cas d'utilisation courants (génération de documentation, ORMS, injection de dépendance) et prévient contre la performance Overhea

La compilation JIT de PHP 8 améliore les performances en compilant le code fréquemment exécuté en code machine, bénéficiant aux applications avec des calculs lourds et en réduisant les temps d'exécution.

Cet article explore l'exécution des tâches asynchrones en PHP pour améliorer la réactivité des applications Web. Il détaille des méthodes comme les files d'attente de messages, les cadres asynchrones (Reactphp, Swoole) et les processus de fond, mettant l'accent sur les meilleures pratiques pour Efficien

Cet article aborde l'optimisation de la mémoire PHP. Il détaille des techniques comme l'utilisation de structures de données appropriées, d'éviter la création d'objets inutile et d'utiliser des algorithmes efficaces. Sources de fuite de mémoire communes (par exemple, connexions non clôturées, V global

Cet article explore les stratégies pour rester à jour dans l'écosystème PHP. Il met l'accent sur l'utilisation des canaux officiels, des forums communautaires, des conférences et des contributions open source. L'auteur met en évidence les meilleures ressources pour apprendre de nouvelles fonctionnalités et un


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

MantisBT
Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

Dreamweaver CS6
Outils de développement Web visuel

Navigateur d'examen sécurisé
Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

PhpStorm version Mac
Le dernier (2018.2.1) outil de développement intégré PHP professionnel