6
votes

Comment arrêter d'autres sites Web pour envoyer des demandes Ajax Domaine croisées?

à partir de 2 applications différentes, j'ai pu envoyer des demandes d'orgue croisée. Bien que le navigateur renvoie une erreur de croix d'origine, mais mon serveur reçoit toujours et exécute la demande. Par exemple, à partir d'un site distant, je peux invoquer une demande de domaine croisé à l'aide de

$.ajax({
        xhrFields: {
            withCredentials: true
        },
        data:{ my: 'a' },
        url: 'http://MyApp/Page',
        type: 'POST'
})


3 commentaires

Bonne question. Si vous avez une réponse pour cela, j'apprécierai beaucoup si vous postez si.


Pour un service WCF, vous pouvez définir CrossDomainscriptAccessensible sur FALSE dans votre configuration de point de fin.


Vous aurez le même problème avec un formulaire Soumettre, pas de JavaScript impliqué. La spécification Cors n'a pas été créée avec une sécurité supplémentaire à l'esprit. Au lieu de cela, cela vous permet d'effectuer essentiellement les mêmes actions que vous pourriez déjà effectuer (cross-origine) sans Ajax. La spécification Cors va un peu plus loin, en ce sens que votre serveur ne reçoit même pas la demande sous-jacente, si votre serveur ne s'inscrit pas correctement à la spécification et que la même demande n'a pas pu être envoyée à l'origine croisée Sans Ajax ( dire, via un formulaire Soumettre). Ce dernier concept s'appelle Prefrighting.


3 Réponses :


0
votes

L'en-tête d'origine d'accès à la commande d'accès doit être défini de manière appropriée pour interdire les domaines autres que ceux dont vous avez besoin. Cependant, cela ne fonctionne que pour les navigateurs modernes. Reportez-vous à http://encia.com/Utilisation-cors -à-Access-Access-ASP-NET-Services-Aux domaines / http://code.google.com/p/html5security/wiki/crossoriginrequestSecurity


1 commentaires

Ce n'est pas le bon endroit pour mettre en œuvre la sécurité. Le navigateur / client ne peut pas faire confiance.



1
votes

sur une solution facile, mais ce n'est pas totalement pare-balles, c'est ce que nous appelons un "jeton de validation". Chaque poste provenant de votre site Web doit avoir un jeton CSRF que vous validez sur le côté serveur pour vous assurer que la demande vient vraiment de votre site Web. Vérifiez cela pour plus d'informations: http://shiflett.org/articles/cross-site-request -Forgies


0 commentaires

2
votes

La vulnérabilité dont vous parlez est CSRF mais il peut être gardé contre.

Vous pouvez vous protéger contre le poste étant soumis en dehors d'une demande AJAX (par exemple par un formulaire HTML) en envoyant et en vérifiant le X-Demandé-with: xmlhttprequest en-tête. Cela ne peut également pas être envoyé cross-domain via Ajax en raison de cette en-tête n'étant pas dans la liste de sécurité (sans Cors c'est).

Cependant, dans le passé, des exploits ont eu des exploits via des plugins tels que Flash où des en-têtes pouvaient être définis qui n'étaient pas possibles via un navigateur (par exemple, référence ) afin de protéger contre ceci, il est recommandé d'utiliser modèle de jeton de synchroniser qui consiste à définir un jeton dans un champ caché qui sera validé ainsi que des cookies pour toutes les demandes destructrices. Par destructif, je veux dire des demandes qui changent, soumettent ou suppriment des choses (c'est-à-dire ce qui devrait être des messages).

Pour plus d'informations, voir ici: http://www.html5rocks.com/fr/Tutoriels / Cors /


2 commentaires

Dans mon étui de formulaire Web ASP.NET, il envoie le cookie, voici des règles de préforme, Le navigateur peut sauter la demande de pré-feu si les conditions suivantes sont vraies: la méthode de la requête est obtenue, la tête ou la poste, et L'application ne définit pas d'en-têtes de requête autres que l'acceptation, la langue d'acceptation, la langue de contenu, le type de contenu ou le dernier ID d'événement et l'en-tête de type de contenu (si défini) est l'une des options suivantes: Application / x -www-form-URLencodé Texte multipart / formulaire / de la plaine


Mais je vais vérifier à nouveau et vous savez. Merci