Algunas etiquetas que me preocupan al analizar el documento html para xxs

1

Estoy creando una aplicación web donde los usuarios pueden hacer publicaciones que consisten en un documento html. Un usuario puede cambiar el documento a través de la herramienta dev por ejemplo. Así que el documento consiste literalmente en cualquier entrada del usuario. Estoy preocupado por XSS ya que no tengo experiencia en esta área. Para evitar las inyecciones de XSS, estoy usando jsoup para analizar el contenido. Hice una lista blanca personalizada pero no estoy seguro (bueno, lo dudo) pensé en todo.

Guardo el contenido de esta manera:

public void setContent(String content){
    content = Jsoup.clean(content, WhiteList4jsoup.getWhiteList());
    this.content = content;
}

Mi jsoup lista blanca es así:

public static Whitelist getWhiteList() {
        Whitelist whiteList = Whitelist.basic();

        whiteList.addAttributes("h1", "style");
        whiteList.addAttributes("h2", "style");
        whiteList.addAttributes("h3", "style");
        whiteList.addAttributes("h4", "style");
        whiteList.addAttributes("h5", "style");
        whiteList.addAttributes("h6", "style");
        whiteList.addAttributes("h7", "style");

        whiteList.addAttributes("a", "href");
        whiteList.addAttributes("img", "src", "style");
        whiteList.addAttributes("div", "style", "aria-label");


        whiteList.addAttributes("table", "style", "rules", "border");
        whiteList.addAttributes("thead", "style");
        whiteList.addAttributes("th", "style");
        whiteList.addAttributes("tr", "style");
        whiteList.addAttributes("td", "style");

        // Those are customs tags that I insert in the document when user
        // clicks on a button. I Let them in so when I display the message content I can grab them tags with javascript and do some business with it.
        whiteList.addAttributes("customContainer", "type", "title", "measured");
        whiteList.addAttributes("columnCustom", "title", "value");
        return whiteList;
    }

¿Es esto potencialmente peligroso?

En realidad, es un editor de wysiwyg en un iframe que yo mismo construyo, así que lo controlo. Dado que el usuario puede crear gráficos, tablas y el resultado es bastante desordenado, con un marcado propio. Es por eso que quería un wysiwyg. Sin embargo, si es demasiado peligroso, seguiré la misma ruta que stackoverflow y haré una vista previa en la parte inferior. Ya terminé mi editor, pero creo que la vista previa no requeriría mucho esfuerzo.

Si ese es el caso, no tengo la intención de utilizar ningún marcado ya disponible, como bbcode porque mi contenido es demasiado personalizado (imágenes, enlaces, gráficos de Google Api, tablas). ¿Hay algo que deba vigilar si estoy construyendo uno?

    
pregunta Ced 22.09.2015 - 23:44
fuente

1 respuesta

2

Lo que estás tratando de hacer es inherentemente bastante peligroso. Recomiendo encarecidamente usar algo como BBCode o Markdown , ya que están diseñados específicamente para permitir contenido bastante rico sin riesgos de inyección de scripts (aunque a veces se encuentran errores en ellos).

Dicho esto, solo hay dos riesgos de scripting realmente obvios que veo en lo que has publicado aquí.

  1. <a href="javascript:alert('XSS!')">Click here!</a> creará algo que parece un hipervínculo "normal" pero ejecutará el código dentro del origen de su sitio (como un XSS) cuando se haga clic. Puede observar que esto no funciona en StackExchange (que utiliza Markdown).
  2. Puede incrustar el comportamiento de las secuencias de comandos en CSS. Las versiones muy antiguas de IE permitían el valor expression en estilos, que es solo una secuencia de comandos integrada, pero también hay una cosa llamada "Comportamiento de CSS" que permite adjuntar secuencias de comandos especificadas externamente a los elementos. Esto es, en efecto, lo mismo que incrustar etiquetas de secuencia de comandos en la página.

Más allá de eso, sin embargo, permitir CSS en general es peligroso. Usando CSS, un usuario malintencionado puede superponer completamente la página, cambiar u ocultar cierto contenido o incluso hacer que la página se vea como algo totalmente diferente de lo que es.

    
respondido por el CBHacking 23.09.2015 - 01:14
fuente

Lea otras preguntas en las etiquetas