Dati senza escape nei tag div o p, ma non in grado di sfruttare

2

Un'applicazione web accetta l'input dell'utente e visualizza i dati, senza alcuna escaping o codifica, nei tag div o p. Quindi, se fornisco <script>alert(1)</script> come input, la fonte dovrebbe apparire più o meno come questa:

<div>
  <p><script>alert(1)</script></p>
</div>

Da ciò suppongo che l'applicazione web sia vulnerabile e che lo script venga eseguito. Questo di solito è il caso, ma ho visto alcune situazioni (non posso fornire esempi in questo momento, purtroppo) dove non è il caso. Il carico utile non viene eseguito anche se si riflette nella pagina.

Quali spiegazioni potrebbero esserci per questo comportamento? Ci sono altre forme di prevenzione XSS che impediscono l'esecuzione di script senza escape?

    
posta SaAtomic 02.11.2017 - 09:26
fonte

1 risposta

6

Vedo un numero di possibili spiegazioni per questo mistero:

  • I browser integrati nella protezione XSS hanno impedito l'esecuzione del codice. Non sono sicuro se il carico utile si rifletterà nel documento se questo fosse il caso, però. (Secondo Conor Mancone in Chrome il carico utile si rifletterà nella fonte ma evidenziato in rosso quando si sceglie vedi sorgente.)
  • Esiste una Politica di sicurezza del contenuto che impedisce l'esecuzione di script inline. Apri la console per gli sviluppatori, vai alla scheda di rete e verifica se è possibile trovare un'intestazione di risposta denominata Content-Security-Policy .
  • Il contenuto viene inserito nel documento utilizzando JS. Se imposti la proprietà text degli elementi DOM (o utilizzi il metodo jQuery .text() ) i tag vill non saranno interpretati come tag ma non codificati come &gt; . Per vedere se questo è il caso, utilizzare l'opzione Visualizza sorgente e vedere se è possibile trovare il proprio carico utile nell'origine della pagina effettiva. Se non è presente, deve essere entrato nel documento tramite JS.
risposta data 02.11.2017 - 10:40
fonte

Leggi altre domande sui tag