Le CSRF middleware et le template tag CSRF sont une protection facile à mettre en place contre les attaques de type CROSS SITE. Ces types d'attaques consiste à injecter du code malicieux à travers le bouton d'un formulaire ou du javascript.
Protéger un simple formulaire
Pour protéger un formulaire il vous suffira t'intégrer le template tag csrf_token dans votre template:
<form action="." method="post">{% csrf_token %}
Protéger POST en ajax
Pour protéger un envoi en ajax POST, vous pouvez récupérer la valeur du csrf_token dans les cookies:
// using jQuery function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } var csrftoken = getCookie('csrftoken'); console.log(csrftoken);
Puis implémentez cette valeur dans toutes les entetes de type ajax
$.ajaxSetup({ headers: { "X-CSRFToken": csrftoken } });
AngualrJS
Et pour ajouter csrf token dans AngularJS par défaut (un exemple avec coffeescript et le plugin jquery $.cookie ):
app.config ($routeProvider, $interpolateProvider, $httpProvider, $resourceProvider) -> $httpProvider.defaults.headers.common['X-CSRFToken'] = $.cookie('csrftoken') $httpProvider.defaults.xsrfCookieName = 'csrftoken'; $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';