Alcuni tag sono preoccupati per l'analisi di html doc per xxs

1

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?

    
posta Ced 22.09.2015 - 23:44
fonte

1 risposta

2

Quello che stai cercando di fare è intrinsecamente abbastanza pericoloso. Consiglio vivamente di utilizzare qualcosa come BBCode o Markdown , in quanto sono progettati specificamente per consentire contenuti abbastanza ricchi senza rischi di injection script (anche se a volte vengono trovati bug in essi).

Detto questo, ci sono solo due rischi di script davvero ovvi che vedo in quello che hai pubblicato qui.

  1. <a href="javascript:alert('XSS!')">Click here!</a> creerà qualcosa che sembra un collegamento ipertestuale "normale", ma eseguirà il codice all'interno dell'origine del tuo sito (come un XSS) quando cliccato. Si può notare che questo non funziona su StackExchange (che utilizza Markdown).
  2. Puoi incorporare il comportamento degli script nei CSS. Le versioni molto vecchie di IE hanno consentito il valore expression in stili, che è solo uno script incorporato flat-out, ma esiste anche una cosa chiamata "CSS Behavior" che consente di collegare gli script specificati esternamente agli elementi, in pratica lo stesso dei tag di script incorporati nella pagina.

Oltre a ciò, però, consentire i CSS in generale è pericoloso. Usando i CSS, un utente malintenzionato può sovrapporre completamente la pagina, modificare o nascondere determinati contenuti o addirittura rendere la pagina simile a qualcosa di completamente diverso da quello che è.

    
risposta data 23.09.2015 - 01:14
fonte

Leggi altre domande sui tag