CSRF Token sécurité Django

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';