Quali sono i principali difese contro XSS?

In altre parole, quali sono le più utilizzate tecniche per l’igienizzazione di ingresso e/o uscita oggi? Giovani industriali (o anche solo per uso personale) i siti web utilizzano per combattere il problema?

  • Ci sono praticamente argomenti di difesa contro XSS, inutile dire che sono comuni. stackoverflow.com/questions/tagged/xss
  • Di ingresso e di uscita da dove a dove?
  • Ingresso a un server sotto forma di una richiesta HTTP, o l’uscita da un server in forma di risposta.
  • Content Security Policy (CSP) ed è anche molto efficace protezione contro gli attacchi XSS. Vedere questo post e content-security-policy.com.
InformationsquelleAutor Admiraldei | 2010-06-28

 

5 Replies
  1. 21

    Si dovrà fare riferimento per l’eccellente OWASP sito per una sintesi di attacchi (tra XSS) e le difese contro di loro. Ecco la spiegazione più semplice che ho potuto venire con, che potrebbe in realtà essere più leggibile rispetto al loro pagina web (ma probabilmente in nessun posto quasi completo).

    1. Specificare un set di caratteri. Prima di tutto, assicurarsi che la pagina web specifica UTF-8 nelle intestazioni o all’inizio del head elemento HTML codificare tutti gli ingressi per evitare che un UTF-7 attacco in Internet Explorer (e versioni precedenti di Firefox) nonostante gli sforzi per prevenire attacchi XSS.

    2. HTML fuga. Tenete a mente che è necessario per HTML-escape di tutti gli input dell’utente. Questo include la sostituzione < con &lt;, > con &gt;, & con &amp; e " con &quot;. Se si potrà mai utilizzare apici attributi HTML, è necessario sostituire ' con &#39; così. Tipico linguaggi di scripting lato server come PHP fornire funzioni per fare questo, e vi incoraggio ad approfondire questi con la creazione di funzioni standard per inserire elementi HTML, piuttosto che l’inserimento in modo scomposto.

    3. Altri tipi di fuggire. Ancora, tuttavia, è necessario essere attenti a non inserire l’input dell’utente come non quotate attributo o un attributo interpretato come JavaScript (ad esempio onload o onmouseover). Ovviamente, questo vale anche per script elementi, a meno che l’ingresso è correttamente JavaScript-escape, che è diverso da HTML in fuga. Un altro tipo particolare di fuga URL fuga per i parametri dell’URL (farlo prima del HTML in fuga correttamente includere un parametro in un link).

    4. Convalida di Url e di valori CSS. Lo stesso vale per gli Url dei link e immagini (senza la convalida di base approvato prefissi) a causa della javascript: schema URL, e anche il foglio di stile CSS e gli Url di dati all’interno di style attributi. (Internet Explorer permette l’inserimento di JavaScript espressioni come valori CSS, e Firefox è altrettanto problematico con la sua XBL di supporto.) Se è necessario includere un valore CSS da una fonte non attendibile, si dovrebbe in modo sicuro e strettamente convalidare o CSS sfuggire.

    5. Non permettendo-HTML fornito. Non permettere all’utente-HTML fornito se si ha la possibilità. Che è un modo semplice per finire con un XSS problema, e così è la scrittura di un “parser” per il tuo linguaggio di markup basato su semplici espressioni regolari sostituzioni. Ho permetterebbe solo di testo formattato se l’output HTML sono stati generati in un evidente modo sicuro da un vero e proprio parser che sfugge a qualsiasi testo di input standard fuga funzioni e individualmente costruisce gli elementi HTML. Se non hai altra scelta, oltre la materia, utilizzare un validatore/disinfettante come AntiSamy.

    6. Prevenzione basato su DOM XSS. Non includere l’input dell’utente in JavaScript codice HTML generato e inserire nel documento. Invece, utilizzare l’apposito DOM metodi per garantire che si è trattati come testo e non HTML.

    Ovviamente, non può coprire ogni singolo caso in cui un utente malintenzionato può inserire codice JavaScript. In generale, HTTP-solo i cookie possono essere utilizzati per, eventualmente, fare un attacco XSS un po ‘ più difficile (ma non impedire a uno), e mi programmatori di formazione per la sicurezza è essenziale.

    • Non capisco come questa risposta è votato più alto. In realtà non parlare la parte più importante: l’Utilizzo di una corretta cross-site request forgery prevenzione token di sicurezza, e di non apportare alcuna modifica in risposta a una. Si può citare e la fuga di quanto si desidera sul proprio sito; che non impedirà a qualche altro sito contenente un modulo o script dannosi che ri-utilizza l’utente di accesso esistenti cookie sul tuo sito. Credo sia importante sottolineare questo, in quanto la domanda stessa è stata confusa (soggetto dice XSS; questione dice di citazione.)
    • Che le cose possono impedire CRSF, non XSS. Questa domanda è di circa XSS, e richiesta la contraffazione non ha nulla a che fare con XSS.
  2. 6

    Ci sono due tipi di attacco XSS. Uno è dove il vostro sito permette HTML per essere iniettato in qualche modo. Questo non è difficile difendere contro: o la fuga di tutti i dati inseriti dall’utente, o una striscia di tutti <> tag e sostenere qualcosa come UBB-codice. Nota: l’Url potrebbe essere ancora aperto fino a rick di laminazione tipo di attacchi.

    Più insiduous è dove alcuni di terze parti sito contiene un IFRAME, uno SCRIPT o un tag IMG o simile che colpisce un URL sul tuo sito, e questo l’URL di utilizzare qualsiasi di autenticazione dell’utente verso il tuo sito. Pertanto, non si dovrebbe mai, mai prendere qualsiasi azione diretta in risposta a una richiesta GET. Se si ottiene una richiesta GET, che tenta di fare nulla (aggiornamento di un profilo, check-out di un carrello della spesa, ecc), allora si dovrebbe rispondere con un modulo che richiede a sua volta un POST per essere accettato. Questo modulo deve contenere anche un cross-site request forgery token, in modo che nessuno può mettere su di un modulo su un sito di terze parti che è impostato per presentare al tuo sito utilizzando i campi nascosti (di nuovo, per evitare un mascheramento di attacco).

  3. 1

    Ci sono solo due aree principali nel codice che devono essere affrontate in modo corretto per evitare xss problemi.

    1. prima di utilizzare qualsiasi utente di input valore nella query, utilizzare il database funzioni di supporto come mysql_escape_string sui dati e quindi utilizzare nella query. Sarà garantito xss sicurezza.

    2. prima di visualizzare i valori di input dell’utente tornare in forma i campi di input, farli passare attraverso htmlspecialchars o htmlentities. Questo permette di convertire tutte xss inclini valori in caratteri che il browser in grado di visualizzare senza essere compromessa.

    Una volta che hai fatto di cui sopra, si sono oltre il 95% al sicuro da attacchi di tipo xss. Poi si può andare avanti e imparare le tecniche avanzate dai siti web di sicurezza e di applicare una protezione supplementare sul tuo sito.

    Ciò che la maggior parte dei quadri non è che non ti scoraggiare per scrivere direttamente il codice del modulo html o fare query in forma di stringa, in modo che l’utilizzo del framework funzioni di supporto il codice rimane pulito, mentre l’eventuale grave problema può essere affrontato in modo rapido da solo l’aggiornamento di una o due righe di codice nel quadro. Si può semplicemente scrivere una piccola biblioteca con funzioni comuni e riutilizzarli in tutti i vostri progetti.

  4. 0

    In JSTL/JSP il modo migliore per proteggere contro XSS è quello di utilizzare la c:out tag senza impostazione predefinita escapeXml parametro uguale a false.

    <c:out value="${somePossiblyDangerousVar}"/>

Lascia un commento