Le cadre Django CSRF ne peut pas être désactivé et brise mon site

Le middleware django csrf ne peut pas être désactivé. Je l’ai commenté de mon middleware de mon projet, mais mes connexions échouent en raison de problèmes de CSRF manquants. Je travaille à partir du tronc Django. Comment CSRF peut-il causer des problèmes s’il n’est pas activé dans le middleware?

Je dois le désactiver car il y a beaucoup de requêtes POST sur mon site que CSRF ne fait que casser. Des commentaires sur la façon dont je peux complètement désactiver CSRF dans un projet de jonction django?

Le “nouveau” framework CSRF du tronc de Django brise également un site externe qui entre et effectue un POST sur une URL que je lui donne (ceci fait partie d’une API reposante). Je ne peux pas désactiver le framework CSRF en tant que J’ai dit plus tôt, comment puis-je résoudre ce problème?

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

Pour exclure manuellement une fonction de vue de la gestion par un middleware CSRF, vous pouvez utiliser le décorateur csrf_exempt du module django.views.decorators.csrf. Par exemple: ( voir doc )

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

..et puis retirez {% 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.

Vous pouvez désactiver cela dans le middleware.

Dans vos settings.py ajoutez une ligne à MIDDLEWARE_CLASSES:

 MIDDLEWARE_CLASSES = ( myapp.disable.DisableCSRF, ) 

Créez un 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 _dont_enforce_csrf_checks dans votre requête, vous devriez vous en sortir.

En général, vous ne devez pas désactiver la protection CSRF, car cela ouvre des failles de sécurité. Si vous insistez, cependant…

Une nouvelle méthode de protection CSRF a atterri récemment dans le coffre. Votre site est-il par hasard toujours configuré pour le faire à l’ancienne? Voici les documents pour The New Way ™ et voici les documents pour The Old Way ™ .

J’ai simplement essayé de supprimer les références aux classes de middleware csrf de mes settings.py, cela fonctionnait. Je ne sais pas si cela est acceptable. Des commentaires? En dessous de deux lignes ont été supprimés –

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

ma version de Django est 1.11. le middleware devrait être comme ceci:

 from django.utils.deprecation import MiddlewareMixin class DisableCSRF(MiddlewareMixin): def process_request(self, request): setattr(request, '_dont_enforce_csrf_checks', True)