2010-10-27 3 views
0

Le formulaire de connexion fonctionne correctement, mais toute autre forme que je soumets (des choses comme l'édition ou la création de données) Je reçois une erreur d'attaque CSRF détectée. J'ai essayé d'effacer symfony et le cache du navigateur, supprimé les cookies, essayé plusieurs navigateurs et plusieurs ordinateurs.Symfony CSRF attack détecté chaque fois que je soumets un formulaire

Que peut provoquer cela? Lorsque j'éteins la protection CSRF, cela fonctionne très bien.

Répondre

4

Chaque fois que j'ai eu cette erreur dans le passé, c'est parce que j'ai oublié de rendre les balises cachées dans mon formulaire. Ne pas oublier d'ajouter cette ligne:

<?php echo $form->renderHiddenFields() ?> 
2

Il est difficile d'y répondre avec les informations fournies. Voici deux possibilités:

  • Etes-vous sûr que le jeton CSRF est réellement envoyé?
  • La même forme traite-t-elle les deux valeurs? Les jetons CSRF dans Symfony sont générés à partir de trois éléments: le secret CSRF (défini dans app.yml), l'ID session et la classe de formulaire. Est-ce que l'une de ces trois choses change?
+2

Le jeton CSRF n'est pas envoyé si vous n'avez pas rendu les champs masqués. –

+0

Mettez-moi dans la bonne direction d'un changement de session id ... – Xosofox

0

Assurez-vous que votre formulaire dans votre modèle inclut la balise CSRF et le soumet à la forme:

<?php echo $form['_csrf_token']->render(); ?> 

Je vais aller sur une branche et suppose que le formulaire de connexion fonctionne parce que vous êtes juste en utilisant le code SfGuard prêt, alors que sur vos propres formulaires, vous avez omis l'étiquette du formulaire ....?

0

Pour vérifier cela, vous devriez essayer d'exécuter Fiddler lors de l'exécution du POST et vérifiez la charge utile pour% 5B_csrf_token% 5D = {} whateveryourtokenis.

Questions connexes