Quel est le point de la X-requested-with-tête?
JQuery et autres frameworks ajouter l'en-tête suivant:
X-Requested-With: XMLHttpRequest
Pourquoi est-ce nécessaire? Pourquoi un serveur de traiter les requêtes AJAX différemment des demandes normales?
Mise à JOUR: je viens de trouver un exemple réel à l'aide de cet en-tête: https://core.spreedly.com/manual/payment-methods/adding-with-js. Si le processeur de paiement est requis, sans AJAX, il la renvoie vers le site d'origine lorsque c'est fait. Lorsqu'il est demandé par l'AJAX, pas de redirection est faite.
- "[Lorsque] a demandé sans AJAX, il la renvoie vers le site d'origine lorsque c'est fait. Lorsqu'il est demandé par l'AJAX, pas de redirection est faite." -> C'est exactement pourquoi vous voulez le faire. 🙂
- stackoverflow.com/questions/3315914/...
Vous devez vous connecter pour publier un commentaire.
Une bonne raison pour la sécurité - ce qui peut empêcher CSRF attaques parce que cet en-tête ne peut pas être ajouté à la requête AJAX croix de domaine sans le consentement du serveur via De la SCRO.
Uniquement les en-têtes suivants sont autorisés croix de domaine:
tout les autres à cause d'un "pré-vol" demande à être délivré de la SCRO navigateurs pris en charge.
Sans SCRO il n'est pas possible d'ajouter
X-Requested-With
à une croix de domaine demande XHR.Si le serveur est en train de vérifier que cet en-tête est présent, il sait que la demande n'a pas amorcer à partir d'un attaquant du domaine de la tentative de faire une demande au nom de l'utilisateur avec le JavaScript. Ce vérifie également que la demande n'a pas Posté de régulièrement un formulaire HTML, de qui il est plus difficile de vérifier qu'il n'est pas de la croix de domaine sans l'utilisation de jetons. (Cependant, la vérification de l'
Origine
de l'en-tête pourrait être une option dans les navigateurs pris en charge, bien que vous quitterez les anciens navigateurs vulnérables.)Flash de dérivation découvert
Vous pouvez combinez cela avec un jeton, parce que Flash en cours d'exécution sur Safari sur mac OSX pouvez définir cet en-tête si il y a une étape de redirection. Il semble il a également travaillé sur Chrome, mais est maintenant mis à jour. Plus de détails ici y compris les différentes versions affectées.
OWASP vous Recommandons de combiner cela avec une Origine et Referer vérifier:
Cependant, pour les raisons déjà discuté de la vérification de l'Origine peut être délicat.
Mise à jour
Écrit plus en profondeur un billet de blog sur De la SCRO, CSRF et X-requested-with ici.
X-Requested-With
en-tête ainsi?Last-Event-ID
.Assurez-vous de lire SilverlightFox de réponse. Il met en évidence une raison plus importante.
La raison en est surtout que si vous connaissez la source d'une requête vous pouvez le personnaliser un peu.
Par exemple, disons que vous avez un site web qui a beaucoup de recettes. Et vous utilisez un personnalisé du framework jQuery pour glisser des recettes dans un conteneur basé sur un lien à cliquer.
Le lien peut être
www.example.com/recipe/apple_pie
Maintenant, normalement, qui renvoie à une pleine page, en-tête, pied de page, la recette des contenus et des publicités. Mais si quelqu'un est à la navigation de votre site web certaines de ces pièces sont déjà chargés. Ainsi, vous pouvez utiliser AJAX pour obtenir la recette sélectionnée par l'utilisateur mais pour gagner du temps et de bande passante ne pas charger l'en-tête/pied de page/ads.
Maintenant, vous pouvez simplement écrire un critère secondaire pour les données comme
www.example.com/recipe_only/apple_pie
mais c'est plus difficile de les maintenir et de les partager à d'autres personnes.Mais il est plus facile de détecter que c'est une requête ajax qui fait la demande, puis le retour d'une partie seulement des données. De cette façon, l'utilisateur utilise moins de bande passante et le site semble plus réactif.
Les cadres ajouter l'en-tête parce que certains peuvent le trouver utile pour garder la trace des demandes de l'ajax et qui ne le sont pas. Mais c'est entièrement dépendante du développeur d'utiliser de telles techniques.
C'est en fait assez similaire à la
Accept-Language
en-tête. Un navigateur peut demander à un site web, prière de me montrer une version russe de ce site sans avoir à insérer /ru/ou similaires dans l'URL.Accept
en-tête. À l'aide d'un en-tête personnalisé pour cela sonne comme de la mauvaise façon d'aller.Certains cadres sont à l'aide de cet en-tête pour détecter les demandes xhr par exemple graal de la sécurité printemps est à l'aide de cet en-tête pour identifier xhr demande et de lui donner une réponse json ou réponse html réponse.
Source: http://grails-plugins.github.io/grails-spring-security-core/guide/helperClasses.html