L'src di un iframe è sicuro per l'input dell'utente?

3
<iframe sandbox="allow-scripts allow-same-origin"
  src="javascript:alert(1)">

Vorrei sapere se l'attributo src di iframe è sicuro per l'input dell'utente? Ho trovato questa domanda , ma il mio dubbio è che ho provato il codice fornito nella risposta e non fa nulla con l'attributo sandbox="allow-scripts allow-same-origin" .

Permetto all'utente di postare video, facendo così quando l'utente pubblica un link sul back-end viene fatta una richiesta per ottenere il valore corretto nel tag meta . Tuttavia nulla sta fermando OP per pubblicare un link a www.my-site-with-fake-meta-tag.com e provare a fare qualcosa di divertente.

Quindi potrei elencare bianchi alcuni domini, ma è un processo noioso. Accanto a ogni sito che ho controllato utilizza un src iframe per il contenuto inviato dall'utente.

    
posta Ced 06.04.2017 - 03:32
fonte

1 risposta

2

No, un <iframe src=...> fornito dall'utente non è sicuro.

Il alert() nell'esempio non viene generato perché la proprietà sandbox blocca automaticamente le finestre di dialogo modali (caselle di avviso). Ma dal momento che hai impostato allow-scripts , il codice JS viene ancora eseguito in background. E poiché allow-same-origin è impostato, viene persino eseguito nello stesso dominio della pagina di incorporamento. L'uso di queste impostazioni rende l'attributo sandbox inutile perché stai dando i privilegi completi della sandbox.

Come prova del concetto, usa semplicemente un'altra funzione, ad es. document.write() :

<iframe sandbox="allow-scripts allow-same-origin" src="javascript:document.write(document.domain)">

Oppure aggiungi la direttiva allow-modals (che non è attualmente documentata al momento):

<iframe sandbox="allow-scripts allow-same-origin allow-modals" src="javascript:alert(1)">

Tieni presente che al posto dello schema javascript: un utente malintenzionato potrebbe anche iniettare un URI data: :

<iframe sandbox="allow-scripts allow-same-origin allow-modals" src="data:text/html,<script>alert(1)</script>">

Se il tuo piano era di dare alla pagina incorporata il minor numero possibile di permessi, avresti potuto lasciare vuoto l'attributo sandbox:

<iframe sandbox src="...">
    
risposta data 06.04.2017 - 03:50
fonte

Leggi altre domande sui tag