Después de de esta extensa recopilación de datos pudimos solucionar este asunto que suelen tener muchos de nuestros usuarios. Te compartimos la solución y deseamos resultarte de gran apoyo.
Solución:
los frame-src
Directiva CSP (que está obsoleta y reemplazada por child-src
) determina qué fuentes se pueden usar en un marco en una página.
los X-Frame-Options
el encabezado de respuesta, por otro lado, determina qué otras páginas pueden usar esa página en un iframe.
En tu caso, http://a.com
con X-Frame-Options: DENY
indica que ninguna otra página puede usarlo en un marco. no importa que http://b.com
tiene en su CSP; ninguna página puede usar http://a.com
en un marco
El lugar donde X-Frame-Options
se cruza con CSP es a través de la frame-ancestors
directiva. De la especificación CSP (énfasis mío):
Esta directiva es similar a la
X-Frame-Options
cabecera que han implementado varios agentes de usuario. los'none'
expresión de origen es más o menos equivalente a la de ese encabezadoDENY
,'self'
aSAMEORIGIN
, y así. La principal diferencia es que muchos agentes de usuario implementan
SAMEORIGIN
de modo que solo coincida con la ubicación del documento de nivel superior. Esta directiva comprueba cada antepasado. Si algún ancestro no coincide, la carga se cancela. [RFC7034]los
frame-ancestors
directiva deja obsoleta laX-Frame-Options
encabezamiento. Si un recurso tiene ambas políticas, elframe-ancestors
la política DEBE ser aplicada y elX-Frame-Options
la política DEBE ser ignorada.
Una pregunta anterior indicaba que esto no funcionaba en Firefox en ese momento, pero es de esperar que las cosas hayan cambiado ahora.
ACTUALIZACIÓN Abril 2018:
Política de seguridad de contenido: la directiva ‘child-src’ ha quedado obsoleta. Utilice la directiva ‘worker-src’ para controlar los trabajadores o la directiva ‘frame-src’ para controlar los marcos, respectivamente.
Parece child-src
ahora es el obsoleto y frame-src
está de vuelta.
Ninguna de sus hipótesis es universal true.
- Chrome ignora
X-Frame-Options
. - Safari 9 y versiones anteriores ignoran CSP
frame-ancestors
. - Safari 10-12 respeta el CSP
frame-ancestors
directiva, pero priorizarX-Frame-Options
si se especifican ambos.
La respuesta se encontró probando en la práctica.
Creé dos sitios web y reproduje la situación descrita.
Parece que X-Frame-Options es principal.
Si el servidor de destino niega el encuadre, el sitio web del cliente no puede mostrar esta página en iframe
cualesquiera que sean los valores de Content-Security-Policy
se establecen.
Sin embargo, no he encontrado ninguna confirmación en la documentación.
Probado en Chrome 54 e IE 11.
Si estás de acuerdo, tienes la libertad de dejar un ensayo acerca de qué le añadirías a este ensayo.