2010-01-06 9 views
5

Mi sitio C# permite a los usuarios enviar HTML para mostrarse en el sitio. Me gustaría limitar las etiquetas y los atributos permitidos para el HTML, pero no puedo encontrar la manera de hacerlo en .net.Limpiar HTML de usuario en .net

He intentado usar Html Agility Pack, pero no veo cómo modificar el HTML, puedo ver cómo ir a través del HTML y encontrar ciertos datos, pero en realidad generar un archivo de salida me desconcierta.

¿Alguien tiene un buen ejemplo para limpiar HTML en .net? El paquete de agilidad podría ser la respuesta, pero falta la documentación.

+0

Buena pregunta. Esto está en la parte superior de mi lista siempre que permita que el código HTML se envíe y se muestre; generalmente uso controles que formatean y desinfectan el resultado para mí (es decir, www.freetextbox.com en ASP.NET) pero realmente debería confirmar el resultado también. +1 para la pregunta. – Codesleuth

Respuesta

2

Con HtmlAgilityPack puede quitar las etiquetas no deseadas de la entrada:

node.ParentNode.RemoveChild(node); 
+0

Ese es el método que estaba buscando. Gracias. – spaetzel

3

Solo debe aceptar HTML bien formado.

Puede usar LINQ to XML para analizar y modificarlo.

Puede realizar una función recursiva que toma un elemento del usuario y devuelve un nuevo elemento con un conjunto incluido en la lista de etiquetas y atributos.

Por ejemplo:

//Maps allowed tags to allowed attributes for the tags. 
static readonly Dictionary<string, string[]> AllowedTags = new Dictionary<string, string[]>(StringComparer.OrdinalIgnoreCase) { 
    { "b", new string[0] }, 
    { "img", new string[] { "src", "alt" } }, 
    //... 
}; 
static XElement CleanElement(XElement dirtyElement) { 
    return new XElement(dirtyElem.Name, 
     dirtyElement.Elements 
      .Where(e => AllowedTags.ContainsKey(e.Name)) 
      .Select<XElement, XElement>(CleanElement) 
      .Concat(
       dirtyElement.Attributes 
        .Where(a => AllowedTags[dirtyElem.Name].Contains(a.Name, StringComparer.OrdinalIgnoreCase)) 
      ); 
} 

Si permite que los hipervínculos, asegúrese de no permitir javascript: URLs; este código no hace eso.

+0

+1 Agradable: me gusta el enfoque "casero". –

0

Una herramienta que puede utilizar que está disponible fuera de SourceForge es SGMLReader que convierte el código HTML a XML con formato correcto y le permite leer como un XmlReader o cargarlo en un objeto XmlDocument para su posterior procesamiento. Lo he usado antes para analizar páginas web que no siempre están en formato HTML.

0

¿Has echado un vistazo a MarkdownSharp que es de código abierto y creado por los chicos aquí?

Cuestiones relacionadas