X-Frame-Options: autoriser-à partir de firefox et chrome

j'implémente un "pass-through "pour X-Frame-Options pour laisser un site partenaire envelopper le site de mon employeur dans une iframe, comme dans cet article: http://blogs.msdn.com/b/ieinternals/archive/2010/03/30/combating-clickjacking-with-x-frame-options.aspx

(fractionnement URL de post)

en un mot, la page de notre partenaire a une iframe avec une URL contre notre domaine. Pour n'importe quelle page de notre domaine, ils ajouteront un spécial argument d'url comme &@mykey=topleveldomain.com , nous disant ce qu'est le domaine de premier niveau de la page.

nos filtres récupèrent le TLD partenaire, s'il est fourni, à partir de L'URL, et le valident par rapport à une liste blanche. Si c'est sur la liste, nous expédions l'en-tête X-Frame-Options avec la valeur ALLOW-FROM topleveldomain.com (et Ajouter un cookie pour les clics futurs). Si ce n'est pas sur notre liste blanche, Nous expédions SAMEORIGIN ou DENY .

le problème est qu'il semble que l'envoi de ALLOW-FROM domain se solde par un non-op dans l'ensemble pour le dernier Firefox et Google Chrome. IE8, du moins, semble appliquer correctement ALLOW-FROM .

consultez cette page: http://www.enhanceie.com/test/clickjack . Juste après la 5ème (de 5) boîtes que "devrait montrer le contenu", est une boîte qui ne devrait pas montrer le contenu, mais qui est. Dans ce cas , la page dans l'iframe envoie X-Frame-Options: ALLOW-FROM http://www.debugtheweb.com , un TLD décidément différent de http://www.enhanceie.com . Pourtant, l'image affiche le contenu.

une idée à savoir si X-Frame-Options est vraiment mis en œuvre avec ALLOW-FROM à travers les navigateurs (de bureau) pertinents? Peut-être que la syntaxe a changé?

Quelques liens d'intérêt:

55
demandé sur groovecoder 2012-05-18 23:09:24

3 réponses

ALLOW-FROM n'est pas supporté dans Chrome ou Safari. Voir L'article de MDN: https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options

vous faites déjà le travail de faire un en-tête personnalisé et l'envoyer avec les données correctes, pouvez-vous non seulement exclure l'en-tête lorsque vous détectez qu'il est d'un partenaire valide et ajouter DENY à toutes les autres requêtes? Je ne vois pas l'avantage de Allow from quand vous êtes déjà en train de construire la logique jusqu'?

31
répondu Kinlan 2015-12-27 23:20:19

j'ai posté cette question et je n'ai jamais vu le feedback (qui est venu dans plusieurs mois après, il semble :).

comme Kinlan l'a mentionné, ALLOW-FROM n'est pas pris en charge dans tous les navigateurs en tant que valeur X-Frame-Options.

la solution était de se connecter en fonction du type de navigateur. Pour IE, ship X-Frame-Options . Pour tous les autres, ship X-Content-Security-Policy .

espérons que cela aide, et désolé pour avoir mis si longtemps à boucler la boucle!

16
répondu Rob 2013-10-04 20:23:18

pour Chrome, au lieu de

response.AppendHeader("X-Frame-Options", "ALLOW-FROM " + host);

vous devez ajouter Content-Security-Policy

string selfAuth = System.Web.HttpContext.Current.Request.Url.Authority;
string refAuth = System.Web.HttpContext.Current.Request.UrlReferrer.Authority;
response.AppendHeader("Content-Security-Policy", "default-src 'self' 'unsafe-inline' 'unsafe-eval' data: *.msecnd.net vortex.data.microsoft.com " + selfAuth + " " + refAuth);

aux en-têtes HTTP-response.

Notez que cela suppose que vous avez vérifié sur le serveur si refAuth est autorisé ou non.

Et aussi, notez que vous devez faire une détection de navigateur pour éviter d'ajouter l'en-tête allow-from pour Chrome (erreur de sortie sur console).

pour de détails, voir ma réponse ici.

5
répondu Stefan Steiger 2017-09-15 06:43:35