2010-05-06 17 views
5

Sto cercando di trovare modi per disinfettare l'input dell'editor WMD.Editor WMD sterilizzante

In particolare, sto cercando di rendere i tag HTML disponibili solo nei tag <code> generati da WMD. È possibile

Il mio problema è che il codice seguente è reso come HTML che è vunerabile al potenziale XSS attacks.

Ad esempio, <a onmouseover="alert(1)" href="#">read this!</a>

Il codice sopra rende normalmente sia in modalità di anteprima e quando salvati nel database.

Ho notato che Stack Overflow non sembra avere questo problema. Lo stesso codice è appena visualizzato come testo.

Ho notato che il team Overflow dello stack ha condiviso il codice in http://refactormycode.com/codes/333-sanitize-html. Devo davvero usare C# per disinfettare le WMD?

+1

nessuno può rispondere alla mia domanda? nessuno l'ha fatto prima? –

risposta

1

Se si desidera bloccare script non validi da WMD sul lato client, dare un'occhiata alla mia risposta qui: Align the WMD editor's preview HTML with server-side HTML validation (e.g. no embedded JavaScript code).

Mostra come implementare una whitelist lato client nell'editor WMD per limitare il riquadro di anteprima WMD HTML a elementi HTML noti e sicuri e attributi HTML noti. Fa la convalida dopo il WMD genera il suo HTML, quindi anche se c'è un bug nella generazione di HTML dell'editor WMD che consente il passaggio di script non validi, il blocco di whitelist lo catturerà. Questo codice è basato sull'implementazione di StackOverflow.com della stessa validazione.

Detto questo, è necessaria anche la convalida sul lato server (se si utilizza PHP, HTML Purifier è una buona scelta), perché anche se si aggiusta il client, ciò non impedisce a un utente malintenzionato di simulare un browser e salvando il markdown dannoso tramite POST-it sul tuo server. Pertanto, la convalida del visualizzatore WMD lato client non è effettivamente necessaria, tranne per difendersi da un caso oscuro in cui un utente malintenzionato riesce a ottenere un markdown compromesso sul server e convince un moderatore del sito a modificare la pagina. In tal caso, la convalida del revisore WMD client potrebbe impedire a un utente malintenzionato di rilevare l'intero sito.

Inoltre, la convalida lato client può essere utile perché in tal caso è possibile che sul server siano consentiti anche gli stessi tag e HTML consentiti dal client. Assicurati di sincronizzare la whitelist lato server con la whitelist del client. La whitelist di StackOverflow è here se si desidera un esempio.