Per la convalida dell'input, raccomando un approccio di whitelist combinato con pass-or-reject. Definisci cosa è valido e accetta solo input validi, rifiuta tutto il resto.
Se si crea un editor di testo RTF che invia HTML al proprio server, è possibile utilizzare JavaScript per disinfettare l'input, in modo che l'incollatura di HTML da Word possa funzionare. Tuttavia il tuo server non accetterà alcun input non pubblicizzato.
Cercare di ripulire è soggetto a errori, in quanto solitamente è molto più complesso, quindi basta capire se l'input è valido o meno.
La whitelist è essenziale per una buona sicurezza. Puoi sempre decidere di accettare più input, mantenendo il controllo. Con un approccio blacklist, dovrai sempre aggiornarti con l'ultimo trucco.
Per l'output, vedi altre risposte.