Backbone.js traite des données sur le serveur sous la hotte. Il n'existe donc aucun moyen facile d'insérer un jeton CSRF dans la charge utile. Comment puis-je protéger mon site contre le CSRF dans cette situation? P>
dans cette réponse: https://stackoverflow.com/a/10386412/954376 , la suggestion est de Vérifiez que l'en-tête de la demande X-demandé est XMLHTTPQUEST. Est-ce suffisant pour bloquer toutes les tentatives de CSRF? P>
Dans Django Docs, la suggestion consiste à ajouter un jeton CSRF dans un autre en-tête personnalisé dans chaque demande Ajax: https://docs.djangoproject.com/fr/1.5/ref/contrib/csrf/#ajax . Est-ce nécessaire? P>
Je comprends si l'attaque utilise une forme cachée, je suis en sécurité en assurant que la demande est de XMLHTTPQUEST. Mais existe-t-il des astuces d'attaque CSRF qui peuvent forger l'en-tête? P>
4 Réponses :
Vous pouvez utiliser un préfiltre pour ajouter le jeton à toutes les demandes:
$.ajaxPrefilter(function(opts) { if (opts.data) { opts.data += "&"; } opts.data += "csrfToken=" + token; });
Merci pour votre réponse! Alors, vérifiez que la vérification de l'en-tête de la demande X n'est pas bonne? Quel type d'attaque peut forger cet en-tête?
@Neowang ceux qui utilisent des bugs dans des plugins comme Flash. Vous ne pouvez pas forger l'en-tête dans une situation normale du CSRF, alors c'est bien sans bugs. Vous pourriez considérer que l'envoi et la vérification de jeton toujours plus simples est beaucoup plus simple que parfois de vérifier le jeton et de vérifier parfois l'en-tête.
Définition d'un jeton CSRF global pour tous les appels JQuery.ajax:
var oldSync = Backbone.sync; Backbone.sync = function(method, model, options){ options.beforeSend = function(xhr){ xhr.setRequestHeader('X-CSRFToken', CSRF_TOKEN); }; return oldSync(method, model, options); };
L'orthographe correcte de la clé d'en-tête est x-csrftoken code>. Il y a un tiret supplémentaire dans votre première suggestion qui le brise.
@kadam L'orthographe correcte de la clé d'en-tête dépend du serveur. Par exemple, Express 3 utilise x-csrf-jeton code>. expressjs.com/3x/apl.html#csrf
Je sais que c'est une question peu ancienne, mais je laisserai un lien vers le repo-github Repo of Module AMD juste pour cela: P>
https://github.com/kuc2477/backbone.csrf.git ( Disclaimer: Je suis l'auteur du module em>) p>
Voici une version mise à jour, basée à Django 1.7 (à l'aide du plug-in jQuery Cookie)
«Je suis en sécurité en assurant que la demande est de XMLHTTPQUEST» - vous ne pouvez pas vous assurer que.