Proteggere gli utenti dagli attacchi XSS basati su DOM

Proteggere gli utenti dagli attacchi XSS basati su DOM

Cross-site scripting (XSS) è uno dei siti Web di attacco wayshackers più comuni. Le vulnerabilità XSS consentono a un utente malintenzionato di eseguire blocchi arbitrari di JavaScript quando altri utenti visitano il tuo sito.

XSS è la vulnerabilità di sicurezza più comune riportata pubblicamente e parte del toolkit di ogni hacker.

Rischi

Prevalenza Rare

Sfruttabilità Facile

Impatto Dannoso

DOM-based attacchi XSS hanno tutti i rischi associati con altri tipi di attacco XSS, con theadded bonus che sono impossibili da rilevare, dal lato server.Qualsiasi pagina che utilizza frammenti URI è potenzialmente a rischio di attacchi XSS.

Protezione

La protezione contro gli attacchi XSS basati su DOM consiste nel verificare che yourJavaScript non interpreti i frammenti URI in modo non sicuro. Thereare un certo numero di modi per garantire questo.

Usa un framework JavaScript

Framework come AngularJS e React utilizzano modelli che rendono la costruzione di HTML ad-hoc un’azione esplicita (e rara). Ciò spingerà il tuo team di sviluppo verso le best practice e renderà le operazioni non sicure più facili da rilevare.

AngularJS

angolo di contenuti dinamici scritto tra parentesi graffe si automaticallybe sfuggito, in modo che la seguente è sicuro:

 <div>{{dynamicContent}}</div>

diffidare di qualsiasi codice che lega il contenuto dinamico per la innerHTML attributesince che non sarà sfuggito automaticamente:

 <div ="dynamicContent"></div> <div innerHTML="{{dynamicContent}}"></div>
Reagire

A Reagire a qualsiasi dinamica di contenuti scritti in parentesi graffe si automaticallybe sfuggito, in modo che la seguente è sicuro:

render() { return <div>{dynamicContent}</div>}

Reagire permette di scrivere HTML grezzo da associazione del contenuto di dangerouslySetInnerHTML proprietà, che è chiamato a ricordare il rischio per la sicurezza! Fai attenzione a qualsiasi codice simile al seguente:

render() { return <div dangerouslySetInnerHTML={ __html: dynamicContent } />}
Controlla attentamente il tuo codice

A volte un framework JavaScript completo è troppo pesante per il tuo site.In in questo caso, dovrai condurre regolarmente revisioni del codice per individuare le localizzazioniche fanno riferimento a window.location.hash. Considerare la possibilità di elaborare standard di codifica concordati su come i frammenti URI devono essere scritti e interpretati e centralizzare questa logica in una libreria principale.

Se si utilizza jQuery, controllare attentamente qualsiasi codice che utilizza la funzionehtml(...). Se stai costruendo HTML grezzo sul lato client sul retro di input non attendibile, potresti avere un problema, se l’input proviene da un frammento URI o meno. Utilizzare la funzione text(...) quando possibile.

Se si utilizzano direttamente le API DOM native, evitare di utilizzare le seguenti proprietà e funzioni:

  • innerHTML
  • outerHTML
  • document.write

Invece, imposta il contenuto del testo all’interno dei tag ove possibile:

  • textContent
Analizza attentamente JSON

Non valutare JSON per convertirlo in oggetti JavaScript nativi, ad esempio utilizzando la funzione eval(...). Invece usa JSON.parse(...).

Rileva codice non sicuro utilizzando strumenti di sviluppo

La suite Burp, prodotta dalla società di sicurezza PortSwigger,può essere utilizzata per rilevare vulnerabilità basate su DOM.

Non usare affatto frammenti URI!

Il codice più sicuro è il codice che non c’è. Se non è necessario utilizzare frammenti URI, non farlo! Scrivi un test unitario per scansionare il tuo JavaScript per le menzioni di window.location.hash e fallo fallire se viene trovato il pattern. Quando è necessario utilizzare frammenti URI, è possibile discutere su come garantire il loro uso sicuro.

Implementare una politica di sicurezza dei contenuti

I browser moderni supportano le politiche di sicurezza dei contenuti Che consentono all’autore di una pagina Web di controllare da dove è possibile caricare ed eseguire JavaScript (e altre risorse). Gli attacchi XSS si basano sul fatto che l’utente malintenzionato è in grado di eseguire script dannosi sulla pagina Web di un utente, inserendo tag <script> in linea da qualche parte all’interno del tag <html> di una pagina o ingannando il browser nel caricare il JavaScript da un dominio di terze parti dannoso.

Impostando un criterio di sicurezza dei contenuti nell’intestazione response, puoi dire al browser di non eseguire mai JavaScript in linea e di bloccare quali domini possono ospitare JavaScript per una pagina:

Politica di sicurezza dei contenuti: script-src ‘auto’ https://apis.google.com

Inserendo nella whitelist gli URI da cui è possibile caricare gli script, si afferma implicitamente che JavaScript inline non è consentito.

La politica di sicurezza dei contenuti può anche essere impostata in un tag <meta> nell’elemento <head> della pagina:

<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://apis.google.com">

Questo approccio proteggerà i tuoi utenti in modo molto efficace! Tuttavia, può takea considerevole quantità di disciplina per rendere il tuo sito pronto per tale intestazione.I tag di script in linea sono considerati una cattiva pratica nello sviluppo Web moderno: la miscelazione di contenuti e codice rende difficili le applicazioni Web da mantenere, ma sono comuni nei siti legacy più vecchi.

Per migrare dagli script in linea in modo incrementale, considerare l’uso di makings ofCSP Violation Reports.By aggiungendo una direttiva report-uri nell’intestazione dei criteri, il browser notificherà eventuali violazioni dei criteri, piuttosto che impedire l’esecuzione di JavaScript inline:

Content-Security-Policy-Report-Only: script-src ‘self’; rapporto-uri http://example.com/csr-reports

Questo ti darà la rassicurazione che non ci sono script in linea persistenti,prima di vietarli a titolo definitivo.

bibliografia

  • Come Cross-site Scripting opere
  • Un’Introduzione alla Politica di Sicurezza dei Contenuti
  • CSP (Content Security Policy) su Mozilla Developer Network
  • DOM Base di Cross-site Scripting Vulnerabilità
  • Politica di Sicurezza dei Contenuti, ha Spiegato
il Cross-site Scripting

Riflette XSS

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.