43 votes

IE8 filtre XSS: qu'est-il vraiment le faire?

Internet Explorer 8 dispose d'une nouvelle fonctionnalité de sécurité, un filtre XSS qui tente d'intercepter le cross-site scripting tentatives. Il est décrit de cette façon:

Le Filtre XSS, une nouvelle fonctionnalité dans Internet Explorer 8, détecte le JavaScript dans les URL et les demandes HTTP POST. Si JavaScript est détecté, le Filtre XSS recherches de preuves de la réflexion, de l'information qui serait retourné à l'attaque du site Web si l'attaquant demande ont été soumis inchangé. Si la réflexion est détecté, le Filtre XSS assainit l'original de la demande, de sorte que le JavaScript supplémentaire ne peut pas être exécutée.

Je trouve que le filtre XSS coups de pied dans, même quand il n'y a pas de "preuve de réflexion", et je commence à penser que le filtre simplement des avis quand une demande est faite pour un autre site et la réponse contient du code JavaScript.

Mais même cela est difficile à vérifier, car l'effet semble aller et venir. IE a différentes zones, et juste quand je pense que j'en ai reproduit le problème, le filtre n'est pas un coup de pied dans, et de plus, je ne sais pas pourquoi.

Quelqu'un a des conseils sur la façon de lutter contre cela? Qu'est-ce que le filtre de recherche vraiment? Est-il possible pour un bon gars pour publier des données à une 3ème partie qui peut renvoyer le code HTML à afficher dans une iframe et de ne pas déclencher le filtre?

Contexte: je suis le chargement d'une bibliothèque JavaScript à partir d'un 3e partie du site. Que JavaScript récoltes de certaines données de la page HTML en cours, et l'affiche de la 3e partie du site, qui répond avec le code HTML à afficher dans un iframe. Pour le voir en action, visitez un AOL Alimentaire de la page et cliquez sur l'icône "Imprimer" juste au-dessus de l'histoire.

56voto

bobince Points 270740

Qu'est-il vraiment le faire? Il permet à des tiers de créer un lien vers un gâchée version de votre site.

Il débute lorsque [quelques conditions sont remplies et que] il voit une chaîne de caractères dans la requête de soumission qui existe aussi mot pour mot dans la page, et qu'il pense peut-être dangereux.

Il suppose que, si <script>something()</script> existe dans la chaîne de requête et le code de la page, alors il doit être parce que votre script côté serveur est précaire et reflète cette chaîne, le dos droit comme un balisage sans s'échapper.

Mais bien sûr, en dehors du fait que c'est parfaitement valide requête quelqu'un pourrait avoir tapé qui correspond, par hasard, il est tout aussi possible qu'ils correspondent parce que quelqu'un a regardé la page et délibérément copié une partie. Par exemple:

http://www.bing.com/search?q=%3Cscript+type%3D%22text%2Fjavascript%22%3E

Suivre que dans IE8 et j'ai été saboté votre Bing page sera donc de donner des erreurs de script, et de la pop-out résultat bits ne fonctionnera pas. Essentiellement, il donne un attaquant dont le lien est suivi de la licence de choisir et de désactiver des parties de la page, il n'aime pas - et qui pourrait même inclure d'autres mesures de sécurité comme framebuster scripts.

Ce n'IE8 considèrent comme "potentiellement dangereux"? Un beaucoup plus et beaucoup des choses plus étranges que juste cette balise de script. par exemple. Qui plus est, il semble correspondre à un ensemble de "dangereuses", les modèles à l'aide d'un modèle de texte du système (probablement regex), au lieu de tout type d'analyseur HTML comme celui qui finira par analyser la page elle-même. Oui, utiliser IE8 et votre navigateur est pařṣing HTML avec des regex.

‘La protection XSS' en regardant les chaînes de caractères dans la requête est totalement bidon. Il ne peut pas être "fixe"; le concept même est intrinsèquement viciée. Outre le problème d'intervenir lorsqu'il n'est pas voulu, il ne peut jamais vraiment vous protéger de quelque chose, mais la plupart des attaques de base et les attaquants vont sûrement solution de contournement de ces blocs que IE8 est plus largement utilisé. Si vous avez été d'oublier de s'échapper de votre sortie HTML correctement, vous serez toujours vulnérables; tous les XSS "protection" a à vous offrir est un faux sentiment de sécurité. Malheureusement, Microsoft semble comme ce faux sentiment de sécurité; il est semblable XSS "protection" dans ASP.NET aussi, sur le côté serveur.

Donc si vous avez une idée de création d'une webapp et vous avez été correctement échapper à la sortie au format HTML comme un bon garçon, il est certainement une bonne idée de désactiver cette indésirable, impraticable, de l'entêtement d'intrusion par la sortie de l'en-tête:

X-XSS-Protection: 0

dans vos réponses HTTP. (Et à l'aide de ValidateRequest="false" dans vos pages si vous utilisez ASP.NET.)

Pour tous les autres, qui sont encore des élingues chaînes en PHP sans prendre soin de coder correctement... eh bien, vous pourriez aussi bien le laisser sur. Ne vous attendez pas à réellement protéger vos utilisateurs, mais votre site est déjà cassé, alors, qui se soucie si il se casse un peu plus, non?

Pour le voir en action, visitez un AOL Alimentaire de la page et cliquez sur l'icône "Imprimer" juste au-dessus de l'histoire.

Ah oui, je peux voir cette rupture dans IE8. Pas immédiatement évident où IE a fait le hack pour le contenu de l'arrêté d'exécution si... la seule demande de domaines que je peux voir c'est un candidat pour le filtre XSS est celle - http://h30405.www3.hp.com/print/start:

POST /print/start HTTP/1.1
Host: h30405.www3.hp.com
Referer: http://recipe.aol.com/recipe/oatmeal-butter-cookies/142275?

csrfmiddlewaretoken=undefined&characterset=utf-8&location=http%253A%2F%2Frecipe.aol.com%2Frecipe%2Foatmeal-butter-cookies%2F142275&template=recipe&blocks=Dd%3Do%7Efsp%7E%7B%3D%25%3F%3D%3C%28%2B.%2F%2C%28%3D3%3F%3D%7Dsp%7Ct@kfoz%3D%25%3F%3D%7E%7C%7Czqk%7Cpspm%3Db3%3Fd%3Do%7Efsp%7E%7B%3D%25%3F%3D%3C%7D%2F%27%2B%2C.%3D3%3F%3D%7Dsp%7Ct@kfoz%3D%25%3F%3D%7E%7C%7Czqk...

qu' blocks paramètre continue avec les pages plus du charabia. Sans doute il y a quelque chose là que (par hasard?) est reflété dans le code HTML renvoyé et déclenche l'un des IE8 est foiré idées de ce qu'est un XSS exploiter ressemble.

Pour résoudre ce problème, HP nécessaire pour que le serveur h30405.www3.hp.com inclure l' X-XSS-Protection: 0 - tête.

25voto

EricLaw Points 28850

Vous devriez m'envoyer (ericlaw@microsoft) une capture réseau (www.fiddlercap.com) le scénario que vous pensez est incorrect.

Le filtre XSS fonctionne comme suit:

  1. Est XSSFILTER activée pour ce processus?
    Si oui– passez à la prochaine vérification Si pas de by – pass Filtre XSS et continuer le chargement
  2. Est un "document" de la charge (comme une image, pas un subdownload)? Si oui– passez à la prochaine vérification Si pas de by – pass Filtre XSS et continuer le chargement
  3. Est-ce un HTTP/HTTPS demande? Si oui– passez à la prochaine vérification Si pas de by – pass Filtre XSS et continuer le chargement
  4. N'RÉPONSE contenir x-xss-protection de l'en-tête? Oui: Valeur = 1: le Filtre XSS Activé (pas de urlaction vérifier) Valeur = 0: le Filtre XSS Désactivé (pas de urlaction vérifier) Non: passez à la prochaine vérification
  5. Le site est en cours de chargement dans une Zone où URLAction XSS permet de filtrage? (Par défaut: Internet, de Confiance, en accès Restreint) Si oui– passez à la prochaine vérification Si pas de by – pass Filtre XSS et continuer le chargement
  6. Est un cross site Request? (Référent de l'en-tête: la finale (post-redirection) nom de domaine pleinement qualifié dans la requête HTTP referrer en-tête correspondre au nom de domaine complet de l'URL récupérée?) Si oui – bypass Filtre XSS et continuer le chargement Si non – alors l'URL dans la demande doivent être castrés.
  7. L'heuristique d'indiquer des données de RÉPONSE est venu de dangereux les DONNÉES de la DEMANDE? Si oui, – de modifier la réponse.

Maintenant, les détails exacts de #7 est assez compliqué, mais, fondamentalement, vous pouvez imaginer que IE ne un match de demande de données (URL/Post-Corps) pour les données de réponse (script) et si elles correspondent, les données de réponse vont être modifiés.

Dans votre site cas, vous aurez envie de regarder le corps de la POSTE http://h30405.www3.hp.com/print/start et la réponse correspondante.

7voto

Roland Bouman Points 15226

En fait, c'est pire que pourrait le sembler. Le filtre XSS pouvez faire en toute sécurité des sites dangereux. Lire ici: http://www.h-online.com/security/news/item/Security-feature-of-Internet-Explorer-8-unsafe-868837.html

À partir de cet article:

Toutefois, Google désactive IE filtre XSS par l'envoi de la X-XSS-Protection: 0 en-tête, ce qui le rend immunitaire.

Je ne sais pas assez sur votre site afin de juger si cela peut être une solution, mais vous pouvez probablement essayer. Plus en profondeur, pour une discussion technique sur le filtre, et comment désactiver c'est ici: http://michael-coates.blogspot.com/2009/11/ie8-xss-filter-bug.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X