Si tratta di un metodo sicuro per l'impostazione dinamica di X-Frame-Options? (più domini)

4
L'intestazione

X-Frame-Options impedirà al tuo sito di essere iFramed da altri domini. Sui browser che accettano la direttiva ALLOW-FROM sei limitato a specificare solo una singola origine. Potresti utilizzare una direttiva CSP 2.0 frame-ancestors per i moderni UA.

Detto questo, è possibile rendere dinamicamente un'intestazione di risposta in base al referente della richiesta e decidere quale tipo di X-Frame-Options intestazione impostare nella risposta.

Ad esempio, per impostazione predefinita puoi servire X-Frame-Options: deny e quindi a livello di controller eseguire il rendering di un deny o semplicemente non inviare alcuna intestazione X-Frame-Options per consentire a tale richiesta di essere iFramed.

Pseudo codice:

referer_host = request.referer
if allowed_origins.includes(referer_host)
  response.headers['X-Frame-Options'] = '' # Remove header from response
else
  response.headers['X-Frame-Options'] = 'deny'
end

Questo meccanismo di sicurezza può essere sconfitto? È possibile che un dominio controllato da un utente malintenzionato forgi il valore di referer che l'unità UA invierà attraverso alcuni hackery di javascript?

    
posta Alex Urcioli 06.04.2016 - 01:30
fonte

1 risposta

5

Per quanto ne so è impossibile inserire un'intestazione di Referer completamente falsa in una normale sessione di navigazione. Ma ci sono vari modi per assicurarsi che non venga inviata nessuna intestazione Referer. Pertanto, finché si consente di essere incorniciati solo se l'intestazione Referer è impostata e il dominio nel Referer è esplicitamente autorizzato a inquadrare il proprio sito, si dovrebbe essere sicuri.

Ma tieni presente che dovresti assicurarti che il tuo assegno non esegua ciecamente alcune espressioni regolari in Referer per verificare good-site perché in questo modo anche qualcosa come http://bad-site/good-site/ o http://good-site.bad-site/ sarebbe permesso di incorniciarti. Non saresti il primo a commettere questo errore.

    
risposta data 06.04.2016 - 06:37
fonte

Leggi altre domande sui tag