Problème avec la protection CSRF dans PHP
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

Problème avec la protection CSRF dans PHP



  1. #1
    YoanL

    Problème avec la protection CSRF dans PHP


    ------

    Bonjour,

    Je suis débutant en programmation et j'ai besoin d'aide car ca fait maintenant plusieurs jours que je n'arrive pas trouver pourquoi j'ai un message d'erreur avec mon jeton CSRF.
    Voici mon code html :
    <form method="POST" action="formulaire.php">
    <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
    .....

    Voici mon code php pour le jeton :
    Code:
    <?php
    session_start();
    
    // Génération d'un token CSRF
    $csrf_token = bin2hex(random_bytes(32));
    $_SESSION['csrf_token'] = $csrf_token;
    
    
    
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    
                // Prévention contre les attaques CSRF
                if ($_SESSION['csrf_token'] === $_POST['csrf_token']) {
                       // Mon code...
                } else {
                    echo "Erreur de validation du formulaire. Veuillez réessayer.";
                  
                }
            }
    
    // Réinitialisation du token CSRF
    unset($_SESSION['csrf_token']);
    
    ?>
    Je vous remercie par avance pour votre aide

    PS : j'utilise wampserver 3.3.5 - 64 bits pour mes essais

    Cordialement,

    -----
    Dernière modification par gienas ; 24/07/2024 à 12h04. Motif: Ajouté les balises code, obligatoires pour les programmes

  2. #2
    umfred

    Re : Problème avec la protection CSRF dans PHP

    et le message d'erreur ?

  3. #3
    YoanL

    Re : Problème avec la protection CSRF dans PHP

    Le message d'erreur est :
    "Erreur de validation du formulaire. Veuillez réessayer.";

    Qui correspond au message que j'ai mis si le csrf n'est pas vérifié

    Cordialement,

  4. #4
    umfred

    Re : Problème avec la protection CSRF dans PHP

    Tu as regardé la valeur de tes jetons?
    D'après ce que je vois, il me semble que tu regénères le token de session à chaque fois; donc quand tu testes ton token, tu compares le nouveau avec le token précédent.
    affiche tes différents token au début et avant le test par exemple pour vérifier cela.

  5. A voir en vidéo sur Futura
  6. #5
    YoanL

    Re : Problème avec la protection CSRF dans PHP

    Merci pour ta reponse.
    Après affichage des différents token, il semblerais que mon problème provienne du faite que mon $_POST['csrf_token'] n'est pas généré
    Mais je sais pas pourquoi.

  7. #6
    YoanL

    Re : Problème avec la protection CSRF dans PHP

    Je crois avoir réussi a avancer.
    Apparemment mon problème venait du nom de mes fichiers (formulaire.html et formulaire.php).
    Maintenant que j'ai renommé mon fichier PHP en form.php, mon défaut à changé :
    "Not Found
    The requested URL was not found on this server.

    Apache/2.4.59 (Win64) PHP/8.2.18 mod_fcgid/2.3.10-dev Server at serveur Port 80"

    A mon avis c'est un problème avec l'envois de mail par le serveur wampserver.
    Quelqu'un peut-il m'aider avec ce problème ?

  8. #7
    YoanL

    Re : Problème avec la protection CSRF dans PHP

    Merci de na pas tenir compte de mon dernier post (post N°6).
    J'ai toujours mon problème de $_POST['csrf_token'] non généré même après avoir supprimé le reset de token

  9. #8
    umfred

    Re : Problème avec la protection CSRF dans PHP

    Il faut que lorsque on est sur la page de ton formulaire, ton token de session soit déjà généré (donc qu'une session soit démarré également), puisque c'est lui que tu renvois via le formulaire dans ton traitement POST

    peut-être que cet exemple/tuto t'aidera https://www.phptutorial.net/php-tutorial/php-csrf/
    Dernière modification par umfred ; 25/07/2024 à 08h43.

  10. #9
    YoanL

    Re : Problème avec la protection CSRF dans PHP

    Super !!!!!

    La solution est d'intégrer la génération du token dans le fichier html (que j'ai passé en php du coup) avant le formulaire .

    Merci beaucoup pour ton aide.

    Par contre, mon serveur avec wampserver 3.3.5 me bloque sur l'envois de mail :
    ( Warning: mail(): Failed to connect to mailserver at &quot;localhost&quot; port 25, verify your &quot;SMTP&quot; and &quot;smtp_port&quot; setting in php.ini or use ini_set() in C:\wamp64\....)

    Est-ce que quelqu'un connait une astuce ?
    Car d'après le fichier php.ini, l'envois de mail n'est pris en charge qu'avec Win32

    Merci par avance

    Cordialement,

  11. #10
    umfred

    Re : Problème avec la protection CSRF dans PHP

    Le message semble indiquer un problème avec la configuration du serveur SMTP (a priori un serveur local sur le port 25); est-ce qu'il est actif ce serveur SMTP sur ton poste?
    Sinon tu peux sans doute utiliser celui de ton FAI en mettant les bons paramètres dans le fichier php.ini et redémarrant le serveur web (apache?) (ça ne devrait pas fonctionner pour ceux demandant une authentification ceci dit)

    ou phpmailer > https://www.ionos.fr/digitalguide/em...ues/phpmailer/

  12. #11
    Ikhar84
    Animateur Informatique

    Re : Problème avec la protection CSRF dans PHP

    Pour la question CSRF, j'essaies de faire un petit code commenté ce soir, ou demain, pour expliquer...

    Pour la fonction mail() , la config est dans le fichier php.ini, notamment le port SMTP (25), et le compte de connexion au serveur SMTP...

    Peu de chance de la faire fonctionner en local, il f1ut passer par un hébergeur qui a bien activé cette fonctionnalité.
    Peu de gratuits le font.
    Sinon tu as la classe PHPMailer, mais nécessite un compte SMTP, et avec les fournisseur de mail gratuits actuels, et la configuration de sécurité des comptes (accès des applications non sécurisées et double authentification), même PHPMailer s'y casse les dents, sans la lib OAuth...

    Pour Gmail, il faut oublier, à partir de septembre prochain, les procédures changent, et la configuration va être encore sécurisée...

    Pour tester en local, tu as devmail, un faker de serveur SMTP :
    https://devmail.email/
    J'ai glissé Chef !

  13. #12
    YoanL

    Re : Problème avec la protection CSRF dans PHP

    Bonjour,

    Merci pour ta réponse.
    J'ai essayé avec un Fake_sendmail et mon adresse gmail mais ca ne marche pas non plus (pas de message d'erreur à part celui de mon code php qui correspond a un échec d'envois mail).
    J'ai trouvé des tutos pour passer par MSMTP mais impossible de trouver les fichier a télécharger sur internet.
    Je reste donc bloqué.

    Existe-t-il un autre logiciel gratuit pour tester des code php avec une fonction envois mail qui marche ?

    Cordialement,

  14. #13
    Ikhar84
    Animateur Informatique

    Re : Problème avec la protection CSRF dans PHP

    Tu veux simuler l'envoi d'email en local pour tester ton code ou réellement envoyer des emails ?
    Où sera déployer l'application, as-tu déjà choisi un hébergeur ?

    Si tu veux simplement tester ton code, essaies devmail, je peux te mettre plus tard un de mes td dessus...

    Si tu veux vraiment envoyer des emails, le meilleur choix reste PHPMailer, regardes le repo github, tu as un exepme avec gmail.

    Regardes sur les forums dédiés comment paramètrer ton compte gmail (provisoirement) pour accepter les applications non sécurisées...
    J'ai glissé Chef !

  15. #14
    YoanL

    Re : Problème avec la protection CSRF dans PHP

    Bonjour,

    Je veux principalement tester mon code pour être sur qu'il fonctionnera si je le met en ligne.
    J'ai donc essayé d'installer devmail comme tu me l'a conseillé mais je n'arrive pas a valider mon adresse mail (500 - SERVER ERROR)

    J'ai regardé PHPMailer mais si je comprend bien, je doit inclure un code bien spécifique dans mon script php.
    Ma question est : Est-ce que je doit supprimer le code "PHPMailer" de mon script php avant de le mettre sur un hébergeur internet ?

    Cordialement,

  16. #15
    Ikhar84
    Animateur Informatique

    Re : Problème avec la protection CSRF dans PHP

    PHPMailer est très utilisé.
    Tu peux le laisser "en production".

    Si tu prends un hebergeur "classique", avec la fonction mail préconfigurée, il suffit souvent de créer une adresse email dans ton compte pour que mail() fonctionne.

    Avec PHPMailer, dans tous les cas, tu dois avoir un compte SMTP, en mocal ou en hébergement.

    Pour tester PHPMailer, télecharges les fichiers PHP du dossier src et ajoutes les à ton projet (on crée un dossier vendor pour les libs externes par convention), et gardes ces fichiers et le code associé en prod.
    J'ai glissé Chef !

  17. #16
    YoanL

    Re : Problème avec la protection CSRF dans PHP

    Ok, merci beaucoup pour toute tes réponses.
    C'est vraiment super sympa de ta part de m'aider

    Cordialement,

Discussions similaires

  1. Réponses: 16
    Dernier message: 09/03/2015, 22h51
  2. Problème avec MSE:Protection en temps réel désactivée!
    Par invite087266a3 dans le forum Sécurité et malwares : désinfectez votre machine
    Réponses: 1
    Dernier message: 06/05/2013, 18h47
  3. Les PTC dans la protection d'appareil.
    Par marc.suisse dans le forum Électronique
    Réponses: 8
    Dernier message: 29/06/2011, 10h51
  4. Réponses: 0
    Dernier message: 16/11/2009, 07h54
  5. protection de mon pc avec avast
    Par invited0e9e4ef dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 04/04/2008, 12h18