Struts 2 codificare i parametri di input per evitare XSS

Ho un’applicazione costruita con Struts 2. Ha alcuni problemi con il Cross-site scripting (XSS), gli attacchi. Voglio codificare alcune delle azioni che i parametri di input in un modo simile a JSP <c:out value="${somevalue}"/> c’È qualche modo per fare questo in Struts 2? API Java metodo andrebbe più che bene.

EDIT ho trovato questa one – http://www.owasp.org/index.php/Talk:How_to_perform_HTML_entity_encoding_in_Java

Alcuna esperienza con esso?

È necessario specificare la modalità di XSS sono possibili, se si utilizza s:proprietà, “<h1>ciao!</h1>” il rendering solo che… è necessario impostare la fuga di proprietà a false per output in html, il tag di proprietà di almeno. s:la struttura è popolare per l’uscita e quindi si deve fare qualcosa di diverso?
Non voglio modificare l’output, la domanda è troppo complessa per che.

OriginaleL’autore Boris Hamanov | 2011-02-09

3 Replies
  1. 9

    È possibile utilizzare

    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
    
    ${fn:escapeXml(someValue)}

    C’è anche un Buon API JSoup

    Sterilizzare non attendibili HTML

    Problema

    Si desidera consentire agli utenti non attendibili per la fornitura di HTML per l’uscita sul tuo sito web (ad esempio, come commento, presentazione). Hai bisogno di pulire il codice HTML per evitare il cross-site scripting (XSS), gli attacchi.

    Soluzione

    Utilizzare il jsoup HTML Cleaner con una configurazione specificata da un Whitelist.

    String unsafe = 
          "<p><a href='http://example.com/' onclick='stealCookies()'>Link</a></p>";
    String safe = Jsoup.clean(unsafe, Whitelist.basic());
          //now: <p><a href="http://example.com/" >Link</a></p>

    Così, tutti fondamentalmente, avete bisogno di fare è la seguente durante l’elaborazione del testo inviato:

    String text = request.getParameter("text");
    String safe = Jsoup.clean(text, Whitelist.basic());
    //Persist 'safe' in DB instead.

    C’è struts2securityaddons

    Questo progetto contiene una configurazione aggiuntiva, intercettori, e altro codice utilizzato per migliorare la sicurezza di struts 2 applicazioni.

    Vedere anche

    OriginaleL’autore Jigar Joshi

  2. 5

    Fuga parametri di input come un XSS prevenzione significa che ha diversi disadvanteges, in particolare:

    • Non si può essere certi circa la destinazione del particolare i dati di input, quindi non è possibile scegliere il corretto escape regime.
    • Fuga di dati di input maschere mancanza di escape dell’output. Senza coerenza escape dell’output, si può ancora passare escape dati di escape uscita involontariamente.
    • Presenza di sfuggire complica l’elaborazione dei dati.

    Perciò sarebbe meglio applicare coerente escape dell’output, invece.

    Vedi anche:

    Sì, sarebbe meglio per la produzione di fuga, ma è molto facile perdere l’uscita di fuga in quanto si applica a più posti, mentre l’ingresso di aspirazione è molto più centralizzato e raramente modificato. Sono certo che non ho bisogno di markup HTML nel mio ingresso.
    Ancora, la fuga in ingresso è abbozzato. Se attacchi nuovi metodi vengono scoperti — hai intenzione di reincode i dati che hai raccolto finora? Inoltre, si assume che si desidera sempre di output html. Cosa succede se in futuro si desidera emettere text/plain? avrai a disposizione tutti questi funky html codici di escape in uscita.

    OriginaleL’autore axtavt

  3. 1

    Non è di facile e pronta soluzione contro XSS con struts 2 tag. La OWASP ESAPI API ha un supporto per la fuga che è molto utile, e hanno librerie di tag.

    Il mio approccio è stato, sostanzialmente, di estendere il stuts 2 tag in modi seguenti.

    1. Modificare s:etichetta di proprietà, in modo che possano attributi extra affermando che tipo di escape è necessaria (escapeHtmlAttribute=”true” etc.). Questo comporta la creazione di una nuova Proprietà e PropertyTag classi. La classe utilizza OWASP ESAPI api per la fuga.
    2. Cambiare freemarker modelli per utilizzare la nuova versione di s:proprietà e impostare la fuga.

    Se non si desidera modificare le classi nel passaggio 1, un altro approccio sarebbe quello di importare il ESAPI tag nel freemarker modelli e fuga come necessario. Quindi se avete bisogno di usare un s:proprietà tag nella pagina JSP, avvolgerlo con e ESAPI tag.

    Ho scritto una spiegazione più dettagliata qui.

    http://www.nutshellsoftware.org/software/securing-struts-2-using-esapi-part-1-securing-outputs/

    Sono d’accordo fuga ingressi non è l’ideale.

    OriginaleL’autore brett.carr

Lascia un commento