web-dev-qa-db-fra.com

Comment Content-Security-Policy fonctionne-t-il avec X-Frame-Options?

Content-Security-Policy ignore-t-il X-Frame-Options, renvoyé par un serveur, ou X-Frame-Options est-il toujours primaire?

En supposant que j'ai:

  • un site Web http://a.com avec X-Frame-Options: DENY
  • et un site Web http://b.com avec Content-Security-Policy: frame-src a.com

navigateur va charger ce cadre?

C'est flou.
D'une part, http://a.com nie explicitement le cadrage.
D'autre part, http://b.com autorise explicitement le cadrage pour http://a.com .

15

La frame-src CSP directive } (obsolète et remplacée par child-src) détermine les sources pouvant être utilisées dans un cadre sur une page.

L’en-tête de réponse X-Frame-Options, quant à lui, détermine quelles autres pages peuvent utiliser cette page dans un iframe.

Dans votre cas, http://a.com avec X-Frame-Options: DENY indique qu'aucune autre page ne peut l'utiliser dans un cadre. Peu importe ce que http://b.com a dans son CSP - aucune page ne peut utiliser http://a.com dans un cadre.


L'endroit où X-Frame-Options intersecte CSP est via la directive frame-ancestors . De la spécification CSP } _ (c'est moi qui souligne):

Cette directive est similaire à l'en-tête X-Frame-Options que plusieurs les agents utilisateurs ont implémenté. L'expression source 'none' est à peu près équivalent à DENY, 'self' à SAMEORIGIN, .__ de cet en-tête. etc. La principale différence réside dans le fait que de nombreux agents utilisateurs implémentent SAMEORIGIN de telle sorte qu'il ne corresponde qu'au niveau supérieur document. Cette directive vérifie chaque ancêtre. Si seulement ancêtre ne correspond pas, le chargement est annulé. [RFC7034]

La directive frame-ancestors obsolète l'en-tête X-Frame-Options. Si une ressource a les deux stratégies, la stratégie frame-ancestors DEVRAIT être appliquée et la stratégie X-Frame-Options DEVRAIT être ignorée.

Une ancienne question } _ a indiqué que cela ne fonctionnait pas dans Firefox à ce moment-là, mais espérons que les choses ont changé maintenant.


MISE À JOUR Avril 2018:

Politique de sécurité du contenu: la directive ‘child-src’ est obsolète. Veuillez utiliser la directive "worker-src" pour contrôler les travailleurs ou la directive "frame-src" pour contrôler les cadres, respectivement.

On dirait que child-src est maintenant celui qui est déconseillé et que frame-src est de retour. 

27
Anand Bhat

Aucune de vos hypothèses n'est universellement vraie.

  • Chrome ignore X-Frame-Options.
  • Safari 9 et les versions antérieures ignorent CSP frame-ancestors.
  • Safari 10-12 respecte la directive CSP frame-ancestors, mais prioritize X-Frame-Options si les deux sont spécifiés.
4
NIRUPAM TEWARY

La réponse a été trouvée en testant dans la pratique.
J'ai créé deux sites Web et reproduit la situation décrite.

Il semble que X-Frame-Options soit primaire.
Si le serveur cible refuse le cadrage, le site Web du client ne peut pas afficher cette page dans iframe selon la valeur définie pour Content-Security-Policy.

Cependant, je n'ai trouvé aucune confirmation dans la documentation.

Testé sur Chrome 54 et IE 11. 

1