Come evitare XSS durante il trasferimento di contenuti di pagine Web all'interno di XML

1

Ho un'applicazione web ASP.NET che usa HTTPS e richiesta-risposta basata su XML. Sembra che il cookie di sessione di un utente possa essere recuperato tramite XSS, se la richiesta / risposta viene intercettata e il codice JavaScript dannoso viene aggiunto come payload.

Poiché si tratta di una richiesta-risposta basata su XML, il payload deve essere codificato in HTML. Ecco un esempio:

"<iframe name="if(0){\u0061lert(1)}else{\u0061lert(document.cookie)}" onload="eval(name)"/>

C'è un modo per interrompere l'esecuzione di qualsiasi script dannoso?

  1. Come identificare una richiesta / risposta contenente uno script dannoso ? Ho notato che tutti gli script dannosi devono contenere " , & , ( e ) , ma i dati utente possono contenere anche questi caratteri.
  2. Come posso impedire che uno script di questo tipo venga eseguito sui browser degli utenti? Ho già provato a decodificare tutte le richieste / risposte per corrompere lo script che funziona, ma le mie richieste / risposte contengono dati utente che contengono caratteri come & . Ciò porta all'intero XML a diventare corrotto, che causa l'arresto anomalo dell'applicazione.
posta KatariaA 01.06.2014 - 23:02
fonte

1 risposta

1

Sei sulla strada giusta, con la codifica XML. Non è possibile prevedere tutti i possibili contenuti dannosi, quindi codificare i dati dinamici per garantire che sia benigno è l'approccio giusto. Il problema che hai riscontrato è che le cose si fanno davvero confuse se si tenta di gestire la codifica di output per più posizioni di output tutte in una volta. L'approccio corretto (e sei vicino) è quello di codificare solo per la posizione di output corrente e lasciare che altre posizioni di output codificino da sole.

Penso che la cosa che ti sta confondendo è che stai pensando all'XML come se fosse l'output grezzo dell'HTML. È necessario considerare l'XML come parte dello stack del protocollo di comunicazione di rete e l'HTML come output separato.

Se viene letto correttamente, è presente un codice server che scrive un messaggio XML e un codice client che viene eseguito nel browser Web, riceve il messaggio XML e scrive in HTML, JavaScript, URL o contesto CSS. (Se leggo in modo errato, probabilmente hai un back-end che scrive XML su un front-end che sta scrivendo HTML, JavaScript, URL e CSS. In questo caso, considera il front-end come il client del back-end nel resto di questo post.)

Pertanto, il server è responsabile della scrittura sicura di XML e il client è responsabile della corretta scrittura di dati HTML, JavaScript, URL e CSS. In questo modo, il codice che scrive l'output è responsabile della presentazione sicura di quell'output.

    
risposta data 02.06.2014 - 00:17
fonte

Leggi altre domande sui tag