Maison >développement back-end >Tutoriel Python >Pourquoi ma vérification CSRF Django échoue-t-elle avec une requête Ajax POST ?

Pourquoi ma vérification CSRF Django échoue-t-elle avec une requête Ajax POST ?

DDD
DDDoriginal
2024-12-04 13:41:14309parcourir

Why is My Django CSRF Check Failing with an Ajax POST Request?

Échec de la vérification CSRF de Django avec la demande de publication Ajax

Comme indiqué dans la documentation de Django, l'activation de la protection CSRF aide à prévenir les attaques malveillantes par requêtes intersites. En suivant les instructions, vous avez tenté d'implémenter la vérification CSRF avec la publication Ajax, mais vous rencontrez toujours un refus.

Pour résoudre ce problème, suivez les étapes suivantes :

  1. Vérifiez l'existence du jeton :
    Assurez-vous que le code JavaScript récupère le jeton CSRF et le stocke dans une variable appelée jeton csrf. Ce jeton doit être présent avant de définir l'en-tête :

    $.post("/memorize/", data, function (result) { ... });
    
    var csrftoken = getCookie('csrftoken');
    xhr.setRequestHeader("X-CSRFToken", csrftoken);
  2. Assurer l'utilisation du jeton :
    Après avoir obtenu le jeton, définissez-le explicitement dans l'en-tête de la requête Ajax en utilisant setRequestHeader.
  3. Vérifiez le corps de la réponse :
    Inspectez le corps de la réponse de Django pour voir s'il mentionne explicitement un jeton CSRF manquant ou invalide.
  4. Méthode alternative (utilisation du corps de données) :
    Au lieu de définir l'en-tête, vous pouvez intégrer le Jeton CSRF dans le corps de données de la requête Ajax comme suit :

    $.ajax({
        data: {
            csrfmiddlewaretoken: '{{ csrf_token }}',
            ...  // Other data
        },
    });
  5. Activer Débogage :
    Activez le mode de débogage CSRF de Django en ajoutant DEBUG = True aux paramètres. Cela peut fournir des messages d'erreur ou des conseils supplémentaires dans le corps de la réponse.

Une fois ces étapes terminées, soumettez à nouveau la requête Ajax pour voir si la vérification CSRF réussit.

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:
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