Mira CsQuery (que yo soy el autor principal de) como una herramienta para manipular HTML.
Este es un puerto .NET jQuery, le proporciona acceso completo a HTML a través de los mismos métodos que usaría en el cliente (un DOM y API de jQuery). Esto hace que sea bastante fácil rodar su propio desinfectante.
Rick Strahl tuvo un blog post recientemente sobre la desinfección de HTML. Mostró cómo hacerlo con sus reglas usando HTML Agility Pack, publiqué un comentario que muestra cómo lograr lo mismo más fácilmente con CsQuery. Los fundamentos son sólo esto, dada una enumeración de las etiquetas BlackList
:
CQ doc = CQ.Create(html);
// creates a grouped selector "iframe,form,script, ..."
string selector = String.Join(",",BlackList);
// CsQuery uses the property indexer as a default method, it's identical
// to the "Select" method and functions like $(...)
doc[selector].Remove();
Si no desea eliminar el contenido realidad en algunas etiquetas, por ejemplo, quizás formateando las etiquetas que desea prohibir, puede usar desenvolver de jQuery. Esto tendría el efecto de eliminar una etiqueta pero preservar sus hijos.
doc[selector].UnWrap();
Cuando haya terminado:
string cleanHtml = doc.Render();
Hay más en el puesto de Ricks para la limpieza de javascript atributos de los eventos y así sucesivamente, pero básicamente CsQuery es una caja de herramientas con una forma familiar y fácil de manipular HTML. Debería ser lo suficientemente fácil crear un desinfectante que funcione de la manera que desee.
El modelo de DOM de CsQuery también contiene métodos para acceder a los estilos directamente (por ejemplo, de una manera más conveniente que simplemente manipular la cadena), si necesita hacer algo como eliminar ciertos estilos con nombre.Por ejemplo, podría quitar el estilo "font-weight" de todos los elementos:
// use the [attribute] selector to target only elements with styles
foreach (IDomObject element in doc["[style]"]) {
if (element.HasStyle("font-weight")) {
element.RemoveStyle("font-weight");
}
}
El principal inconveniente de CsQuery en este momento es la documentación. Su API está diseñada para coincidir lo más posible con el navegador DOM y jQuery (teniendo en cuenta las diferencias de idioma entre jQuery y C#), y la API pública está bien comentada, por lo que debería ser fácil codificar contra una vez que empiece.
Pero hay un puñado de métodos no estándar (como "HasStyle" y "RemoveStyle" que) son exclusivos de CsQuery. Sin embargo, el uso básico está cubierto bastante bien en el archivo léame en github. También está en Nuget como CsQuery
.
[HTML Tidy] (http://tidy.sourceforge.net/) es viejo, pero lo he usado con éxito. – transistor1
No estoy seguro de que sea lo que estoy buscando, sin embargo. El objetivo principal aquí es garantizar que la entrada del usuario no contenga scripts ejecutables. HTML Tidy se ve bien, pero parece tener un propósito muy diferente. –