Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
java-html-sanitizer — Toma HTML de terceros y produce HTML seguro para incrustar en tu aplicación web. Rápido y fácil de configurar. | Kitploit
Herramientas/GitHubGitHub/owasp/java-html-sanitizer
Herramientas DefensivasAnálisis EstáticoAnálisis de CódigoSeguridad WebMala ConfiguraciónSeguridad de APIs
GitHubowasp/java-html-sanitizer

java-html-sanitizer

Toma HTML de terceros y produce HTML seguro para incrustar en tu aplicación web. Rápido y fácil de configurar.

Ver Repositorio
94823616hace 1 díaRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

OWASP Java HTML Sanitizer

Java CI with Maven Coverage Status CII Best Practices Maven Central

Un sanitizador de HTML rápido y fácil de configurar escrito en Java que te permite incluir HTML generado por terceros en tu aplicación web mientras te proteges contra XSS.

La dependencia existente es de JSR 305. Los otros archivos JAR solo son necesarios para el conjunto de pruebas. La dependencia de JSR 305 es una dependencia solo de compilación, necesaria únicamente para anotaciones.

Este código fue escrito teniendo en cuenta las mejores prácticas de seguridad, cuenta con un amplio conjunto de pruebas y ha pasado por una revisión de seguridad adversarial.

Tabla de contenidos

  • Getting Started
  • Prepackaged Policies
  • Crafting a policy
  • Custom policies
  • Preprocessors
  • Telemetry
  • Questions?
  • Contributing
  • Credits

Primeros pasos

Getting Started incluye instrucciones sobre cómo empezar con o sin Maven.

Políticas preempaquetadas

Puedes usar políticas preempaquetadas:

root@kitploit:~
PolicyFactory policy = Sanitizers.FORMATTING.and(Sanitizers.LINKS);
String safeHTML = policy.sanitize(untrustedHTML);

Creación de una política

Las pruebas muestran cómo configurar tu propia política:

root@kitploit:~
PolicyFactory policy = new HtmlPolicyBuilder()
    .allowElements("a")
    .allowUrlProtocols("https")
    .allowAttributes("href").onElements("a")
    .requireRelNofollowOnLinks()
    .toFactory();
String safeHTML = policy.sanitize(untrustedHTML);

Políticas personalizadas

Puedes escribir políticas personalizadas para hacer cosas como cambiar h1s por divs con una clase específica:

root@kitploit:~
PolicyFactory policy = new HtmlPolicyBuilder()
    .allowElements("p")
    .allowElements(
        (String elementName, List<String> attrs) -> {
          // Add a class attribute.
          attrs.add("class");
          attrs.add("header-" + elementName);
          // Return elementName to include, null to drop.
          return "div";
        }, "h1", "h2", "h3", "h4", "h5", "h6")
    .toFactory();
String safeHTML = policy.sanitize(untrustedHTML);

Ten en cuenta que los elementos "a", "font", "img", "input" y "span" deben ser explícitamente incluidos en la lista blanca usando el método allowWithoutAttributes() si deseas que se permitan pasar a través del filtro cuando estos elementos no incluyan atributos.

Las políticas de atributos también permiten ejecutar código personalizado. Agregar una política de atributos no debilitará ninguna política predeterminada, como las comprobaciones de atributos style o URL.

root@kitploit:~
new HtmlPolicyBuilder = new HtmlPolicyBuilder()
    .allowElement("div", "span")
    .allowAttributes("data-foo")
        .matching(
            (String elementName, String attributeName, String value) -> {
              // Return value for the attribute or null to drop.
            })
        .onElements("div", "span")
    .build()

Preprocesadores

Los preprocesadores permiten insertar texto y cambios estructurales a gran escala.

root@kitploit:~
new HtmlPolicyBuilder = new HtmlPolicyBuilder()
    // Use a preprocessor to be backwards compatible with the
    // <plaintext> element which 
    .withPreprocessor(
        (HtmlStreamEventReceiver r) -> {
          // Provide user with info about links before they click.
          // Before:                       <a href="https://example.com/...">
          // After:  (https://example.com) <a href="https://example.com/...">
          return new HtmlStreamEventReceiverWrapper(r) {
            @Override public void openTag(String elementName, List<String> attrs) {
              if ("a".equals(elementName)) {
                for (int i = 0, n = attrs.size(); i < n; i += 2) {
                  if ("href".equals(attrs.get(i)) {
                    String url = attrs.get(i + 1);
                    String origin;
                    try {
                      URI uri = new URI(url);
                      String scheme = uri.getScheme();
                      String authority = uri.getRawAuthority();
                      if (scheme == null && authority == null) {
                        origin = null;
                      } else {
                        origin = (scheme != null ? scheme + ":" : "")
                               + (authority != null ? "//" + authority : "");
                      }
                    } catch (URISyntaxException ex) {
                      origin = "about:invalid";
                    }
                    if (origin != null) {
                      text(" (" + origin + ") ");
                    }
                  }
                }
              }
              super.openTag(elementName, attrs);
            }
          };
        }
    .allowElement("a")
    ...
    .build()

El preprocesamiento ocurre antes de aplicar una política, por lo que no puede afectar la seguridad de la salida.

Telemetría

Cuando una política rechaza un elemento o atributo, notifica a un HtmlChangeListener.

Puedes usar esto para realizar un seguimiento de las tendencias de violaciones de políticas y detectar cuándo alguien está haciendo un esfuerzo para vulnerar tu seguridad.

root@kitploit:~
PolicyFactory myPolicyFactory = ...;
// If you need to associate reports with some context, you can do so.
MyContextClass myContext = ...;

String sanitizedHtml = myPolicyFactory.sanitize(
    unsanitizedHtml,
    new HtmlChangeListener<MyContextClass>() {
      @Override
      public void discardedTag(MyContextClass context, String elementName) {
        // ...
      }
      @Override
      public void discardedAttributes(
          MyContextClass context, String elementName, String... attributeNames) {
        // ...
      }
    },
    myContext);

Nota: Si una cadena se sanitiza sin notificaciones de cambio, no es necesariamente seguro usar la cadena de entrada. Solo utiliza la salida del sanitizador.

El sanitizador garantiza que la salida esté en un subconjunto de HTML en el que los analizadores de HTML de uso común coincidirán en el significado, pero la ausencia de notificaciones no significa que la entrada esté en dicho subconjunto, solo que no contiene elementos o atributos que fueron eliminados.

Consulta "¿Por qué sanitizar cuando puedes validar?" para obtener más información sobre este tema.

¿Preguntas?

Si deseas informar una vulnerabilidad, consulta AttackReviewGroundRules.

Suscríbete a la lista de correo para recibir notificaciones sobre Vulnerabilidades conocidas y actualizaciones importantes.

Contribuciones

Si deseas contribuir, contacta a @mvsamuel o @manicode.

Aceptamos reportes de problemas y PRs. Los PRs que cambien el comportamiento o añadan funcionalidad deben incluir tanto pruebas positivas como negativas.

Ten en cuenta que las contribuciones están sujetas a la Licencia Apache 2.0.

Créditos

Agradecimientos a todos los que han ayudado con críticas y código.

Descargar herramienta