Este enfoque no es idéntico a StackExchange, pero encontré que la biblioteca AntiXSS 4.x es una forma sencilla de desinfectar la entrada para permitir HTML "seguro".
http://www.microsoft.com/en-us/download/details.aspx?id=28589 Puede descargar una versión aquí, pero la vinculé para el útil archivo DOCX. Mi método preferido es utilizar el administrador de paquetes NuGet para obtener el último paquete AntiXSS.
Puede usar el ensamblado HtmlSanitizationLibrary que se encuentra en la biblioteca 4.x AntiXss. Tenga en cuenta que GetSafeHtml() está en HtmlSanitizationLibrary, en Microsoft.Security.Application.Sanitizer.
content = Sanitizer.GetSafeHtml(userInput);
Esto se puede hacer antes de guardar en la base de datos. La ventaja es eliminar el contenido malicioso de forma inmediata y no tener que preocuparse por él cuando lo genere. La desventaja es que no manejará ningún contenido de base de datos existente, y usted tiene que aplicar esto cada vez que realice actualizaciones de la base de datos.
El enfoque alternativo es utilizar este método cada vez que muestre contenido.
Me encantaría saber cuál es el enfoque preferido.
Me parece que esto es demasiado agresivo para limpiar la entrada WYSIWYG. Los enlaces se reducen a solo . –
Pero si estás hablando de permitir etiquetas HTML, entonces una codificación AntiXss no es lo que quieres, ¿o sí?Eso convertiría, digamos a < a &rt; (es decir, codifíquelo para que ya no sea una etiqueta HTML). – McGarnagle
Correcto: no quiero la codificación AntiXss. Sin embargo, la biblioteca AntiXss incluye la biblioteca Sanitization. Sin embargo, parece que la versión 4.2 "rompió todo". Este enlace en StackOverflow enlaces a un montón de cosas útiles: http://stackoverflow.com/questions/3959136/antixss-htmlencode-vs-antixss-getsafehtmlfragment incluyendo esta solución que utiliza una lista blanca (y puede personalizarlo usted mismo) para desinfectar: http://eksith.wordpress.com/2012/02/13/antixss-4-2-breaks-everything/ –