Sto cercando un semplice disinfettante HTML scritto in JavaScript. Non è necessario essere sicuro al 100% con XSS.Semplice disinfettante HTML in Javascript
Sto implementando Markdown e l'editor Markdown WMD (il ramo master SO di github) sul mio sito web. Il problema è che l'HTML mostrato nell'anteprima dal vivo non è filtrato, come qui su SO. Sto cercando un disinfettante HTML semplice/veloce scritto in JavaScript in modo da poter filtrare il contenuto della finestra di anteprima.
Non c'è bisogno di un parser completo con protezione XSS completa. Non sto inviando l'output al server. Sto inviando il Markdown al server in cui utilizzo un disinfettante HTML completo e corretto prima di memorizzare il risultato nel database.
Google è assolutamente inutile per me. Ottengo solo centinaia di articoli (spesso errati) su come filtrare javascript dall'HTML generato dall'utente in tutti i tipi di linguaggi lato server.
UPDATE
ti spiego un po 'meglio il motivo per cui ho bisogno di questo. Il mio sito web ha un editor molto simile a quello qui su StackOverflow. C'è un'area di testo per inserire la sintassi MarkDown e una finestra di anteprima sotto di essa che ti mostra come apparirà dopo averlo inviato.
Quando l'utente invia qualcosa, viene inviato al server in formato MarkDown. Il server lo converte in HTML e quindi esegue un disinfettante HTML su di esso per ripulire l'HTML. MarkDown permette l'HTML arbitrario quindi ho bisogno di ripulirlo. Ad esempio, l'utente digita qualcosa come:
<script>alert('Boo!');</script>
Il convertitore MarkDown non lo tocca poiché è HTML. Il disinfettante HTML lo spoglierà in modo che l'elemento di script non sia più disponibile.
Ma questo non è ciò che accade nella finestra di anteprima. La finestra di anteprima converte solo MarkDown in HTML ma non lo disinfetta. Quindi, la finestra di anteprima avrà un elemento di script. Ciò significa che la finestra di anteprima è diversa dal rendering effettivo sul server.
Voglio risolvere il problema, quindi ho bisogno di un disinfettante HTML JavaScript veloce e sporco. Qualcosa di semplice con l'elemento base/attributo lista nera e whitelist farà. Non è necessario che sia XSS sicuro perché la protezione XSS viene eseguita dal disinfettante HTML sul lato server.
Questo è solo per assicurarsi che la finestra di anteprima corrisponda al rendering effettivo del 99,99% delle volte, il che è abbastanza buono per me.
Potete essere d'aiuto? Grazie in anticipo!
FWIW, lo odio quando l'anteprima non corrisponde a ciò che viene pubblicato. – Ms2ger
@ ms2ger: Ecco perché ho bisogno del disinfettante HTML, in modo che l'anteprima corrisponda a ciò che il server fa sul back-end. –
non è un problema consentire che sarebbero gli attaccanti a testare i loro attacchi nel loro browser mentre non si vede nessuno dei loro tentativi? – siukurnin