58 votes

Certains App-ID ne peuvent pas être désactivés et n'autorisent que l'état Activé.

Le django csrf middleware peut pas être désactivé. J'ai commenté à partir de mon Middleware de mon projet, mais mes connexions sont un échec en raison du manque de CSRF questions. Je suis en train de travailler à partir de la Django tronc. Comment peut-CSRF causer des problèmes si elle n'est pas activée dans le middleware?

Je dois le désactiver car il y a beaucoup de demandes POST sur mon site qui CSRF est juste casse. Tous les commentaires sur comment je peux désactiver complètement CSRF dans un django tronc projet?

La "nouvelle" CSRF cadre de Django tronc est aussi briser un site externe qui est à venir dans et faire un POST sur l'URL, je leur donne (c'est la partie d'une API restful.) Je ne peux pas désactiver le CSRF cadre comme je l'ai dit auparavant, comment puis-je résoudre ce problème?

127voto

Adriot Points 1047

Oui, le framework Django csrf peut être désactivé.

Pour exclure manuellement une fonction d'affichage du traitement de tout middleware CSRF, vous pouvez utiliser le décorateur csrf_exempt, situé dans le module django.views.decorators.csrf. Par exemple:

 from django.views.decorators.csrf import csrf_exempt                                          
@csrf_exempt                                                                                  
      def my_view:                                                                            
          return Httpresponse("hello world")
 

..et supprimez {% csrf_token %} à l'intérieur des formulaires de votre modèle ou laissez les autres éléments inchangés si vous ne les avez pas inclus dans vos formulaires.

82voto

shreddd Points 3237

Vous pouvez désactiver ceci dans le middleware.

Dans votre fichier settings.py, ajoutez une ligne à MIDDLEWARE_CLASSES:

 MIDDLEWARE_CLASSES = (

    myapp.disable.DisableCSRF, 

)
 

Créez un fichier disable.py dans myapp avec les éléments suivants

 class DisableCSRF(object):
    def process_request(self, request):
        setattr(request, '_dont_enforce_csrf_checks', True)
 

Fondamentalement, si vous définissez les _dont_enforce_csrf_checks dans votre demande, vous devriez être ok.

11voto

Aaron Points 138

Voir les réponses ci-dessous présente une meilleure solution. Depuis que j'ai écrit cela, beaucoup de choses ont changé. Il y a maintenant des meilleures façons de désactiver CSRF.

Je ressens votre douleur. Il n'est pas acceptable pour un cadre de modifier les fondamentaux de la fonctionnalité. Même si je veux commencer à utiliser à partir de maintenant, j'ai des anciens sites sur la même machine le partage d'une copie de django. De telles modifications devraient exiger le numéro de version majeure révisions. 1.x --> 2.x.

De toute façon, pour le fixer j'ai juste commenté sur et ont arrêté la mise à jour de Django comme souvent.

Fichier: django/middleware/csrf.py Autour de la ligne 160:

            # check incoming token
#            request_csrf_token = request.POST.get('csrfmiddlewaretoken', None)
#            if request_csrf_token != csrf_token:
#                if cookie_is_new:
#                    # probably a problem setting the CSRF cookie
#                    return reject("CSRF cookie not set.")
#                else:
#                    return reject("CSRF token missing or incorrect.")

5voto

Hank Gay Points 36173

En général, vous ne devriez pas être la désactivation de la protection CSRF, car cela ouvre des brèches de sécurité. Si vous insistez, mais...

Une nouvelle façon de faire de la protection CSRF atterri dans le coffre tout récemment. Est votre site par hasard, toujours configuré pour le faire à l'ancienne? Voici les docs pour Le Nouveau mode™ et voici les docs de L'Ancienne™.

4voto

Yateen Points 11

J'ai simplement essayé de supprimer les références aux classes de middleware csrf de mon fichier settings.py, cela a fonctionné. Pas sûr que ce soit acceptable. Des commentaires? En dessous de deux lignes ont été supprimées -

       'django.middleware.csrf.CsrfViewMiddleware',
      'django.middleware.csrf.CsrfResponseMiddleware',
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X