¿Cómo controlo la incrustación de mi iframe con múltiples nidos?

2

El dominio example1.com incrusta mi iframe.

El dominio example2.com incrusta un iframe servido desde example1.com .

Definiría X-Frame-Options: ALLOW FROM *.example1.com así como Content-Security-Policy con frame-ancestors .

Pero entonces el navegador no permite mostrar el contenido del iframe, porque el dominio de la ventana es example2.com , que no es igual a example1.com .

¿Cómo puedo solicitar una lista blanca para el insertador ( example1.com ) y también para el integrador del insertador ( example2.com )?

    
pregunta Joshua Fox 06.09.2018 - 13:03
fuente

1 respuesta

2

CSP frame-ancestors ya hace lo que quieres.

  • Content-Security-Policy: frame-ancestors [...] comprueba la cadena de ancestros completa . Si algún documento principal no coincide con la lista blanca de origen, su documento no se cargará.

    Si su cadena es top(child(grandchild)) , esta política para grandchild pasaría:

    Content-Security-Policy: frame-ancestors top child
    

    Pero ninguno de estos:

     Content-Security-Policy: frame-ancestors top
     Content-Security-Policy: frame-ancestors child
     Content-Security-Policy: frame-ancestors 'none'
    
  • X-Frame-Options: allow-from [...] solo verifica un antepasado único. La implementación de facto en la mayoría de los navegadores es que comprueba el origen top pero no hay orígenes intermedios.

    Si su cadena es top(child(grandchild)) , esta directiva para grandchild funcionaría:

    X-Frame-Options: allow-from http://top/
    

    Pero ninguno de estos:

    X-Frame-Options: allow-from http://child/
    X-Frame-Options: sameorigin
    X-Frame-Options: deny
    

La especificación W3C CSP2 también explica la diferencia:

  

7.7.1. Relación con X-Frame-Options

     

Esta directiva es similar al encabezado X-Frame-Options que varios agentes de usuario han implementado. La expresión de origen 'none' es aproximadamente equivalente a DENY , 'self' a SAMEORIGIN de ese encabezado, y así sucesivamente. 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]

(Source)

    
respondido por el Arminius 06.09.2018 - 15:15
fuente

Lea otras preguntas en las etiquetas