Ci sono molte domande di overflow dello stack (ad esempio Whitelisting, preventing XSS with WMD control in C# e WMD Markdown and server-side) su come fare di lavaggio sul lato server di Markdown prodotto da l'editor WMD per garantire il codice HTML generato non contiene script dannosi, come questo:anteprima allineamento del redattore WMD HTML con la convalida HTML lato server (ad esempio, nessun codice JavaScript incorporato)
<img onload="alert('haha');"
src="http://www.google.com/intl/en_ALL/images/srpr/logo1w.png" />
Ma non ho trovato un buon modo per chiudere il foro sul lato client troppo. La convalida del client non sostituisce ovviamente la convalida di scrubbing sul server, dal momento che chiunque può fingere di essere un cliente e POST you mark you brutto. E se stai tagliando l'HTML sul server, un utente malintenzionato non può salvare il codice HTML errato in modo che nessun altro possa vederlo più tardi e venga rubato i cookie o le sessioni vengano dirottate dallo script non valido. Quindi c'è un caso valido da fare che potrebbe non valere la pena applicare le regole senza script anche nel riquadro di anteprima WMD.
Ma immagina che un utente malintenzionato abbia trovato un modo per ottenere Markdown dannoso sul server (ad esempio, un feed compromesso da un altro sito o contenuto aggiunto prima della correzione di un bug XSS). La tua whitelist lato server applicata quando si traduce markdown in HTML normalmente impedirebbe che quel Markdown errato venga mostrato agli utenti. Ma se l'autore dell'attacco può convincere qualcuno a modificare la pagina (ad es. Pubblicando un'altra voce dicendo che l'ingresso malevolo ha un link interrotto e chiedendo a qualcuno di risolverlo), allora chiunque modifica la pagina ottiene il dirottamento dei suoi cookie. Questo è certamente un caso isolato, ma potrebbe valere la pena di difendersi.
Inoltre, è probabilmente una cattiva idea consentire alla finestra di anteprima del client di consentire HTML diversi da quelli consentiti dal server.
Il team Overflow dello stack ha inserito questo foro apportando modifiche a WMD. Come hanno fatto?
[NOTA: l'ho già capito, ma ha richiesto un po 'complicato debug di JavaScript, quindi sto rispondendo alla mia domanda qui per aiutare gli altri che potrebbero voler fare la stessa cosa].
Non sono convinto che questo sia qualcosa che deve essere risolto. Sembra una soluzione alla ricerca di un problema. Forse il motivo per cui non vedi questo codice nella versione StackOverflow di WMD è perché non esiste, perché non è necessario. –
Sì, non sono nemmeno convinto che sia necessario. Detto questo, i ragazzi di StackOverflow.com lo hanno implementato per garantire che l'anteprima non abbia mai generato HTML che il loro validatore lato server non avrebbe accettato. Sembra ragionevole, anche se non sono d'accordo con una priorità terribilmente alta. Vedi http://meta.stackexchange.com/questions/1227/preview-should-match-the-posted-view per maggiori dettagli sul perché SO ha fatto. BTW Ho appena modificato la mia domanda per allinearmi alla ragione effettiva per cui SO voleva farlo. –
Potresti AJAX postare l'HTML e recuperare l'HTML sanitizzato dal server, per ottenere un'anteprima perfetta. – ceejayoz