Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Symfony][CSRF] La value n'est pas chargée

Sujet résolu
    15 décembre 2024 à 19:14:25

    Bonjour à tous,

    Je suis en symfony 7.2.

    J'essaye d'activer le CSRF sur mon app.

    composer require symfony/security-csrf

    Puis:

    # config/packages/framework.yaml
    framework:
        # ...
        csrf_protection: ~

    Mais sans succès. J'ai donc continué : 

    # config/packages/framework.yaml
    framework:
        # ...
        form:
            csrf_protection:
                enabled: true

    Puis l'EntityType :

        public function configureOptions(OptionsResolver $resolver): void
        {
            $resolver->setDefaults([
                'data_class' => Entity::class,
                'csrf_protection' => true,
            ]);
        }

    Mais toujours le même comportement sur le champ et la valeur du champ hidden :

    <input type="hidden" id="entity__token" name="entity[_token]" data-controller="csrf-protection" autocomplete="off" value="csrf-token">

    Comme vous le voyez la valeur n'est pas du tout celle attendue (aléatoire)

    Auriez-vous d'autres idées sur l'implémentation et une étape que j'oublierai ? 

    Merci



    -
    Edité par CyrilCHARLIER 15 décembre 2024 à 19:23:48

    • Partager sur Facebook
    • Partager sur Twitter
      15 décembre 2024 à 21:35:21

      Salut

      Est-ce que tu utilises Stimulus, par hasard ? Ce data-controller me paraît être quelque chose qui se base/demande un ajout de ce genre.

      -
      Edité par Ymox 15 décembre 2024 à 21:35:52

      • Partager sur Facebook
      • Partager sur Twitter
        16 décembre 2024 à 6:27:03

        EDIT

        Merci pour ta réponse déjà.

        Non aucun Stimulus côté front, seulement du bootstrap

        PS : si je fais "voir le code source" sur le navigateur, le data-controller est aussi présent donc avec aucune action côté client.

        -
        Edité par CyrilCHARLIER 16 décembre 2024 à 6:33:58

        • Partager sur Facebook
        • Partager sur Twitter
          16 décembre 2024 à 11:39:32

          Mais aurais-tu tenté de l'installer pour tester avant de te dire que tu t'en passerais ?

          D'autre part, est-ce que le mécanisme de CSRF fonctionne, ou justement pas ?

          Autre question : pour quel formulaire exactement regardes-tu le token ? Un formulaire de connexion, d'édition ? De quoi ?

          Comment rends-tu le champ CSRF ? Avec une fonction Twig spécifique (csrf_token(…)), ou de manière générique/par défaut (form_end(…)) ?

          Qu'as-tu dans /config/packages/csrf.yaml ?

          Evidemment, as-tu bien purgé le cache ? Il est vrai que le mode de développement ne devrait pas avoir ce problème, mais on a vu des personnes qui développaient en mode production…

          Ce formulaire est-il accessible uniquement quand on est authentifié sur le site ?

          -
          Edité par Ymox 16 décembre 2024 à 11:57:43

          • Partager sur Facebook
          • Partager sur Twitter
            24 décembre 2024 à 7:26:00

            Ymox a écrit:

            Mais aurais-tu tenté de l'installer pour tester avant de te dire que tu t'en passerais ?

            D'autre part, est-ce que le mécanisme de CSRF fonctionne, ou justement pas ?

            Autre question : pour quel formulaire exactement regardes-tu le token ? Un formulaire de connexion, d'édition ? De quoi ?

            Comment rends-tu le champ CSRF ? Avec une fonction Twig spécifique (csrf_token(…)), ou de manière générique/par défaut (form_end(…)) ?

            Qu'as-tu dans /config/packages/csrf.yaml ?

            Evidemment, as-tu bien purgé le cache ? Il est vrai que le mode de développement ne devrait pas avoir ce problème, mais on a vu des personnes qui développaient en mode production…

            Ce formulaire est-il accessible uniquement quand on est authentifié sur le site ?


            Hello,

            Désolé pour le délai de réponse, je n'ai pas eu d'alerte de réponse.

            Pour te répondre dans l'ordre:

            • Non je n'ai jamais tenté de l'installer pour le tester, je ne savais même pas qu'il existait.
            • Non le CSRF ne fonctionne pas ou plutôt mal : je n'ai pas de valeur aléatoire dans la value (cf mon premier poste avec le rendu de la balise hidden)
            • Je l'utilise pour un formulaire de création
            • Je fais le rendu directement avec le form_end qui génère les balises manquantes
            • Dans csrf.yaml je n'ai que "csrf_protection:~"
            • Effectivement le cache est vidé et je suis bien en DEV (bien vu de poser la question :) )
            • Oui le formulaire est accessible uniquement quand on est connecté

            Je suis reparti sur un projet vide et tout refat comme je pensais avoir fait. Cette fois-ci le la base csrf est bien remplie : 

            <input type="hidden" id="analysis__token" name="analysis[_token]" data-controller="csrf-protection" autocomplete="off" value="5df08b5956549cc87348c7d1.Fwc1MuYK6IdchtVYHK_v8Q642e-cd54jn753HSFCBCs.QGZ7a9JHsLMOyeYuTN6-xGH5tNjwFaZgytsZWWgnNERFZFtXrkO932jJmA" />
            


            Merci pour le coup de main !

            • Partager sur Facebook
            • Partager sur Twitter
              25 décembre 2024 à 10:33:36

              CyrilCHARLIER a écrit:

              - Non le CSRF ne fonctionne pas ou plutôt mal : je n'ai pas de valeur aléatoire dans la value (cf mon premier poste avec le rendu de la balise hidden)

              Malheureusement, cela n'indique pas si le mécanisme en place, même si "visuellement étrange", fonctionne ou non avec cela.
              Question reformulée : est-ce que tu reçois un message comme quoi le jeton est invalide quand tu soumets un formulaire avec cette "étrangeté" ?

              CyrilCHARLIER a écrit:

              - Oui le formulaire est accessible uniquement quand on est connecté

              J'ai le même cas sur un de mes projets, les formulaires "publics" ont un jeton effectif, les formulaires "privés" ont la même chose que toi, et je n'avais pas fait attention avant ce sujet. Et je ne voyais rien de spécial au niveau fonctionnement. Donc, à moins d'une réponse positive à la question ci-avant, je ne pense pas qu'il faille se faire du souci, surtout s'il s'agit d'un formulaire "privé".

              • Partager sur Facebook
              • Partager sur Twitter

              [Symfony][CSRF] La value n'est pas chargée

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown