Come controllo l'incorporamento multiplo del mio iframe?

2

Dominio example1.com incorpora il mio iframe.

Dominio example2.com incorpora un iframe servito da example1.com .

Imposterei X-Frame-Options: ALLOW FROM *.example1.com e Content-Security-Policy con frame-ancestors .

Tuttavia, il browser non consente di mostrare il contenuto dell'iframe, perché il dominio della finestra è example2.com che non è uguale a example1.com .

Come posso richiedere una whitelist per l'embedder ( example1.com ) e anche per l'embedder dell'espansore ( example2.com )?

    
posta Joshua Fox 06.09.2018 - 13:03
fonte

1 risposta

2

CSP frame-ancestors fa già ciò che vuoi.

  • Content-Security-Policy: frame-ancestors [...] controlla la catena di antenati intera . Se un documento genitore non corrisponde alla whitelist di origine, il tuo documento non verrà caricato.

    Se la tua catena è top(child(grandchild)) , questa norma per grandchild passerà:

    Content-Security-Policy: frame-ancestors top child
    

    Ma nessuno di questi:

     Content-Security-Policy: frame-ancestors top
     Content-Security-Policy: frame-ancestors child
     Content-Security-Policy: frame-ancestors 'none'
    
  • X-Frame-Options: allow-from [...] controlla solo un singolo antenato. L'implementazione di fatto nella maggior parte dei browser è che controlla l'origine top ma senza origini intermedie.

    Se la tua catena è top(child(grandchild)) , questa direttiva per grandchild funzionerebbe:

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

    Ma nessuno di questi:

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

La specifica W3C CSP2 spiega anche la differenza:

7.7.1. Relation to X-Frame-Options

This directive is similar to the X-Frame-Options header that several user agents have implemented. The 'none' source expression is roughly equivalent to that header’s DENY, 'self' to SAMEORIGIN, and so on. The major difference is that many user agents implement SAMEORIGIN such that it only matches against the top-level document’s location. This directive checks each ancestor. If any ancestor doesn’t match, the load is cancelled. [RFC7034]

(Source)

    
risposta data 06.09.2018 - 15:15
fonte

Leggi altre domande sui tag