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:
X-Frame-Options: DENY
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 .
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émententSAMEORIGIN
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êteX-Frame-Options
. Si une ressource a les deux stratégies, la stratégieframe-ancestors
DEVRAIT être appliquée et la stratégieX-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.
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.
Aucune de vos hypothèses n'est universellement vraie.
X-Frame-Options
.frame-ancestors
.frame-ancestors
, mais prioritize X-Frame-Options
si les deux sont spécifiés.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.