Il rendering dei contenuti forniti dall'utente implica una vulnerabilità xss?

2

Sto lavorando a un programma di chat nel mio tempo libero. Se un utente immette html, verrà eseguito il rendering, ad esempio <a href="example.com">link</a> renderà un collegamento ipertestuale. Allo stesso tempo, se si utilizza un tag script, lo script non sembra essere eseguito, ma viene inserito nel dom. Dovrei essere preoccupato?

Modifica: Come ho risolto la vulnerabilità, ecco il sito per chiunque sia interessato. wezelchat.herokuapp.com e il repo su github .

    
posta The_Bob 29.10.2018 - 20:39
fonte

2 risposte

5

Sì, sembra che dovresti essere preoccupato.

Ti suggerisco di dare un'occhiata al foglio di trucchi XSS per i test di OWASP e vedere se puoi ottenere un popup sul tuo sito (indicando che sei vulnerabile a XSS).

Una buona idea è l'inserimento di javascript in un tag immagine:

<img src="javascript:alert('XSS');">

o

<img src=doesnotexist onerror="alert('XSS')">

Se è necessario che gli utenti siano in grado di inviare HTML, è necessario creare un elenco di autorizzazioni per decidere quali tag HTML (e quali attributi all'interno di tali tag) vengono caricati nel DOM e tutto il resto viene visualizzato come testo. Questo può essere davvero complicato, ad esempio <img src="https://...">potrebbeessereok,ma<imgsrc="javascript:..."> no. Questo diventa rapidamente un gioco di whack-a-mole che probabilmente vincerà il cheat OWASP.

Ad un certo punto, potrebbe essere più semplice passare dall'invio di HTML ad alcuni tipi di librerie standard di markdown (come stackexchange o github) in modo da evitare del tutto l'intero gioco di white list.

TL; DR: se stai consentendo l'HTML arbitrario, probabilmente hai un problema XSS.

    
risposta data 29.10.2018 - 20:49
fonte
5

Consiglierei contro HTML. A meno che non si impieghi molto tempo a rafforzare la configurazione di sever (OWASP), i caricamenti HTML sono un invito all'abuso. Invece, potresti prendere in considerazione un linguaggio meno potente (e quindi meno rischi per la sicurezza) come ad es. Markdown. Il punto chiave è che hai un controllo molto più preciso su ciò che i documenti conterranno.

    
risposta data 31.10.2018 - 14:14
fonte

Leggi altre domande sui tag