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?