Estoy en busca de clase/util etc. para sanear el código HTML, es decir eliminar peligroso etiquetas, atributos y valores para evitar XSS y ataques similares.

Puedo obtener el código html del editor de texto enriquecido (por ejemplo, TinyMCE), pero se puede enviar malicioso, de ommiting TinyMCE de validación («los Datos presentados de forma off-site»).

Hay nada tan simple de usar como InputFilter en PHP? Solución perfecta me imagino que funciona igual que (supone el desinfectante es encapsulado en HtmlSanitizer clase):

String unsanitized = "...<...>...";           //some potentially 
                                              //dangerous html here on input

HtmlSanitizer sat = new HtmlSanitizer();      //sanitizer util class created

String sanitized = sat.sanitize(unsanitized); //voila - sanitized is safe...

Actualización – la solución más simple, el mejor! Pequeño util clase con tan poco dependencias externas en otras librerías/frameworks como sea posible – sería mejor para mí.


¿Y que?

  • Así que lo que básicamente quiero es para que los clientes puedan presentar los formularios que se muestran a continuación, en forma de fx. un libro de visitas? Y usted quiere ser capaz de utilizar el lenguaje html, pero usted todavía desea ser capaz de bloquear a los usuarios maliciosos hacking-intentos? O ¿puedo obtener todo mal aquí…?
  • Quiero a los clientes (los usuarios a través de sus navegadores) para presentar de contenido de texto enriquecido (html, formato de texto enriquecido editor – TinyMCE) pero comprobar y eliminar potencialmente peligrosas (inseguro) contenido. No sé lo que es fx y libro de visitas que mencionar en este contexto.
  • Ah! Voy a darle una oportunidad, dame un par de minutos
InformationsquelleAutor WildWezyr | 2010-08-05

5 Comentarios

  1. 23

    Puede intentar OWASP Java HTML Sanitizer. Es muy simple de usar.

    PolicyFactory policy = new HtmlPolicyBuilder()
        .allowElements("a")
        .allowUrlProtocols("https")
        .allowAttributes("href").onElements("a")
        .requireRelNofollowOnLinks()
        .build();
    
    String safeHTML = policy.sanitize(untrustedHTML);
  2. 13


    Usted podría utilizar OWASP ESAPI para Java, que es una biblioteca de seguridad que está construida para hacer este tipo de operaciones.

    No sólo tiene codificadores para el HTML, tiene también codificadores para realizar JavaScript, CSS y codificación URL. Ejemplos de uso de ESAPI se puede encontrar en el XSS de prevención de cheatsheet publicado por OWASP.

    Podría utilizar el OWASP AntiSamy proyecto para definir un sitio de política que establece lo que es permitido en el contenido enviado por el usuario. La política del sitio puede ser utilizado más tarde para obtener la «limpia» de HTML que se muestra de nuevo. Usted puede encontrar un muestra TinyMCE archivo de política en el AntiSamy página de descargas.

    • esto requeriría para reconstruir la arquitectura de mi todo el proyecto. yo no estoy dispuesto a hacerlo. necesito algo sencillo sin muchas dependencias y no hay necesidad de cambiar la forma en que mi código está organizado (a mí me gusta la forma en que es ahora). así que, necesito solo un util de clase para hacer el trabajo. mi pregunta es ahora actualizado para aclarar que el requisito.
    • No estoy seguro de lo que significa la reconstrucción de la arquitectura del proyecto. AntiSamy se adapta perfectamente a sus necesidades, permitiendo que el texto del editor de entradas de ser alimentado en un filtrado de la biblioteca impulsado por una política del sitio.
    • Hmmm. Parece que están a la derecha! Sólo pensé que es grande y pesado framework como struts, spring, etc. y funciona como una especie de filtro de servlets ;-). Probablemente grandes letras en el nombre («OWASP») engañado a mí aquí. Por CIERTO: ¿cuáles son exactas a las dependencias de OWASP AntiSamy – ¿qué más necesito para usarlo?
    • El AntiSamy POM podría dar una pista (el enlace que se proporciona más adelante es de SVN, y no debe ser utilizada directamente). Se hace necesario un par de otras bibliotecas, pero no estoy seguro de cómo es utilizada internamente por AntiSamy. Ref: code.google.com/p/owaspantisamy/source/browse/trunk/Java/…
    • Fyi, OWASP Java HTML Sanitizer tiene como objetivo proporcionar un más eficiente, más fácilmente configurable alternativa a AntiSamy.
    • Junto con un javax.servlet.Filtro ya esta resuelto el problema en mi caso. No tuve que modificar el código existente.

  3. 6

    HTML escapar de insumos funciona muy bien. Pero en algunos casos las reglas de negocio pueden requerir que usted NO para escapar de los HTML. El uso de expresiones regulares (REGEX no es apto para la tarea, y es muy difícil llegar a una buena solución utilizando.

    La mejor solución que encontré fue usar: http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer

    Se construye un árbol DOM con la entrada y filtros de cualquier elemento no previosly permitido por una lista Blanca. La API también tiene otras funciones para la limpieza de html.

    Y también puede ser utilizado con javax.validación @SafeHtml(whitelistType=, additionalTags=)

  4. 4

    Gracias a @Saljack del respuesta. Sólo para elaborar más a OWASP Java HTML Sanitizer. Funcionó muy bien (rápido) para mí. Acabo de añadir el siguiente a la pom.xml en mi proyecto de Maven:

        <dependency>
            <groupId>com.googlecode.owasp-java-html-sanitizer</groupId>
            <artifactId>owasp-java-html-sanitizer</artifactId>
            <version>20150501.1</version>
        </dependency>

    De verificación aquí para la última versión.

    Luego he añadido esta función para la desinfección:

        private String sanitizeHTML(String untrustedHTML){
            PolicyFactory policy = new HtmlPolicyBuilder()
                .allowAttributes("src").onElements("img")
                .allowAttributes("href").onElements("a")
                .allowStandardUrlProtocols()
                .allowElements(
                "a", "img"
                ).toFactory();
    
            return policy.sanitize(untrustedHTML); 
        }

    Más se pueden agregar etiquetas mediante la ampliación de la delimitado por comas parámetro en allowElements método.

    Sólo tiene que añadir esta línea antes de pasar el grano fuera para guardar los datos:

        bean.setHtml(sanitizeHTML(bean.getHtml()));

    Que es!

    Por una lógica más compleja, esta biblioteca es muy flexible y puede manejar más sofisticados desinfección de la aplicación.

Dejar respuesta

Please enter your comment!
Please enter your name here