Sto costruendo un'app web in cui gli utenti possono creare post composti da un documento html. Ad esempio, un utente può modificare il documento tramite lo strumento di sviluppo. Quindi il documento consiste letteralmente in ogni input dell'utente. Sono preoccupato per XSS poiché non ho esperienza in questo settore. Per evitare le iniezioni di XSS, sto usando jsoup per analizzare il contenuto. Ho creato una lista bianca personalizzata ma non sono sicuro (ne dubito) ho pensato a tutto.
Salva il contenuto in questo modo:
public void setContent(String content){
content = Jsoup.clean(content, WhiteList4jsoup.getWhiteList());
this.content = content;
}
La mia jsoup lista bianca è simile a questa:
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;
}
C'è qualcosa di potenzialmente pericoloso?
In realtà è un editor wysiwyg in un iframe che costruisco da solo, quindi ho il controllo su di esso. Dal momento che l'utente può creare grafici, tabelle e simili, il risultato è piuttosto confuso con un mio markup. Ecco perché volevo un wysiwyg. Comunque se è troppo pericoloso andrò sullo stesso percorso di StackOverflow e fare un'anteprima in fondo. Ho già finito il mio editor, ma penso che l'anteprima non richiederebbe molto sforzo.
Se è il caso, non intendo utilizzare alcun markup già disponibile come bbcode perché il mio contenuto è troppo personalizzato (immagini, collegamenti, grafici di Google API, tabelle). C'è qualcosa che dovrei fare attenzione se ne sto costruendo uno?