Il cross-site scripting (XSS) rimane una seria minaccia, anche se i framework front-end più utilizzati includono molte funzionalità di sicurezza innovative. Framework come React o Angular forniscono meccanismi di mitigazione del rischio per impostazione predefinita, ma un’implementazione errata o l’inclusione di librerie di terze parti possono causare vulnerabilità della sicurezza. Pertanto gli sviluppatori non dovrebbero fare affidamento esclusivamente su questi strumenti, ma dovrebbero continuare a scrivere codice in modo attento alla sicurezza e adottare misure difensive aggiuntive per prevenire efficacemente gli XSS.
annuncio
Martina Krause si occupa di sviluppo web fin dai suoi primi anni. È sempre stata appassionata di implementare ottime soluzioni software in Node.js e Angular. Come sviluppatrice di software freelance, lavora principalmente con Angular concentrandosi sulla sicurezza nelle applicazioni web.
Gli aggressori scoprono costantemente nuovi modi per identificare le vulnerabilità XSS e inserire codice dannoso in siti Web affidabili. A causa della minaccia persistente, i team di sviluppo e sicurezza devono aggiornare regolarmente le loro migliori pratiche e implementare continuamente meccanismi di protezione avanzati come la Content Security Policy (CSP).
CSP svolge un ruolo centrale nella protezione da XSS perché impone ai browser esattamente quali contenuti esterni possono caricare. Questo articolo descrive l’uso di CSP come parte di una strategia di sicurezza a più livelli per prevenire attacchi XSS e proteggere la tua applicazione web.
Il codice dannoso passa inosservato grazie al cross-site scripting
Lo scripting cross-site lo è Una vulnerabilità di sicurezza comune nelle applicazioni web. Permette di incorporare codice dannoso, solitamente sotto forma di JavaScript, nelle pagine di un sito Web affidabile. Quando si accede alla pagina, il browser esegue inosservato il codice inserito. L’attacco si basa sull’incapacità del browser di distinguere tra script legittimi provenienti dal server e script dannosi provenienti dagli aggressori.
L’attacco di solito si presenta così:
- Identificazione delle vulnerabilità: l’aggressore cerca specificamente opportunità per inserire codice dannoso nell’applicazione web. Ciò avviene spesso tramite campi di input, ad esempio per commenti, nomi utente o query di ricerca.
- Iniezione di codice: se un utente malintenzionato scopre una vulnerabilità, inserisce codice dannoso nell’applicazione web. Questo può essere fatto tramite l’immissione diretta in moduli o indirettamente tramite collegamenti contenenti il codice nell’URL e inviati a utenti ignari.
- Esecuzione di codice dannoso: se una vittima accede al sito, il codice dannoso verrà eseguito nel suo browser. L’aggressore può quindi, tra le altre cose, modificare il contenuto visualizzato, reindirizzare il browser a un sito Web dannoso o accedere ai cookie per impersonare la vittima.
A seconda del luogo in cui viene memorizzato ed eseguito il codice dannoso si distingue tra XSS lato server e XSS lato client. Nel primo caso il codice dannoso viene memorizzato sul server e visibile a ogni utente che accede alla pagina interessata. L’XSS lato client è un attacco che apporta modifiche al DOM (Document Object Model) di una pagina nel browser della vittima, senza che il client debba ricevere i dati interessati dal server.
L’esempio seguente presuppone che un’applicazione Web contenga una vulnerabilità XSS. Per sfruttare questa vulnerabilità, un utente malintenzionato potrebbe utilizzare diversi payload. Il seguente frammento di codice elenca alcune opzioni diverse:
//indice.html
Content Security Policy als Gegenmaßnahme
Die erste Version der Content Security Policy ist 2010 erschienen. Mozilla-Entwickler haben die Maßnahme in einem wissenschaftlichen Artikel ausführlich beschrieben. Sie haben darin erläutert, wie Entwickler Sicherheitsrichtlinien definieren können, um dem Browser genau mitzuteilen, welche Ressourcen eine Webanwendung laden darf. Obwohl die Idee hinter CSP auf äußerst positive Resonanz stieß, zeigte sich, dass die Kontrolle über das Laden von Ressourcen in modernen Anwendungen komplexer ist als ursprünglich angenommen. Dennoch wird CSP kontinuierlich weiterentwickelt und bleibt damit eine wichtige Sicherheitsmaßnahme. Eine zentrale Rolle moderner CSP-Richtlinien ist es, als zweite Verteidigungslinie gegen XSS-Schwachstellen zu dienen. Wirksam ist sie jedoch nur, wenn die Anwendung an erster Stelle die Nutzereingaben gründlich bereinigt. Angesichts der Tatsache, dass fast jede Webanwendung trotz guter Sicherheitsvorkehrungen irgendwann anfällig für XSS werden kann, stellt sich die Frage, wie die CSP-Richtlinie den Angreifer daran hindern kann, die Schwachstelle auszunutzen.Blockieren der Skriptausführung mit CSP
Die Content Security Policy zielt darauf ab, verschiedene Angriffsvektoren zu unterbinden. Dazu setzt CSP strikte Einschränkungen bezüglich der Ausführung von Skriptcode durch. Der folgende Ausschnitt zeigt einen CSP-Header mit einer minimalen Konfiguration:Content-Security-Policy: script-src 'self'
script-src
wie im obigen Beispiel, style-src
, img-src
, und frame-src
. Für den Schutz vor JavaScript-Injection-Attacken ist die script-src-Direktive essenziell.
Jede Direktive kann einen oder mehrere Werte angeben, die festlegen woher Inhalte geladen werden dürfen. Quellen können URLs, Schlüsselwörter wie 'self'
(die eigene Domain) oder 'none'
(blockiert das Laden von Ressourcen dieser Art vollständig) sein.
Der Server fügt den CSP-Header in die HTTP-Response mit der HTML-Seite für den Browser ein. Die Richtlinienkonfiguration script-src 'self'
teilt dem Browser mit, dass diese Seite nur Skripte ausführen darf, die von ihrem eigenen Ursprung (Origin) kommen. Sie bestimmt zudem, dass es verboten ist, Inline-JavaScript-Code auf dieser HTML-Seite auszuführen.
L'esempio nella Figura 1 mostra un'applicazione in esecuzione su https://my-site (1). Con l'intestazione CSP impostata, il browser può eseguire solo file JavaScript caricati che provengono dallo stesso sito https://my-site (2). Anche se tutto il resto è bloccato, la policy esclude esplicitamente anche l'esecuzione del file JavaScript https://evil.de/attack.js (3).
Cosa significa questo per i vettori di attacco mostrati sopra?
Il primo attacco è finito
Si basa sull'esecuzione di codice JavaScript dannoso quando il browser tenta di caricare un'immagine che non può essere trovata. Anche se il codice si trova nella pagina, verrà eseguito dal browser a causa della regola CSP script-src 'self'
Non è presente alcun codice JavaScript incorporato.
Il blocco dell'esecuzione del codice protegge anche da un secondo vettore di attacco che lo tenta Esegue direttamente il codice JavaScript inserito in modo dannoso.
Alla fine tenta di attaccare , eine JavaScript-Datei von https://evil.de zuladen. Da https://evil.de nicht der Origin der Anwendung entspricht, wird der Browser das Laden dieser Datei verweigern. CSP blockiert also vollständig die Ausführung von potenziell zweifelhaftem JavaScript-Code.
Sfortunatamente, questo significa anche che nell'applicazione non verrà eseguito nemmeno il codice JavaScript inline valido. Poiché ciò accade spesso, le norme CSP finora descritte non sono pratiche.
È qui che entra in gioco il Livello 2 della Content Security Policy del 2016. Mira a migliorare la compatibilità con le applicazioni pratiche senza compromettere la sicurezza. Il secondo livello del CSP introduce due nuovi meccanismi: hash e zeri.
“Pensatore incurabile. Appassionato di cibo. Studioso di alcol sottilmente affascinante. Difensore della cultura pop.”
More Stories
Ecco come dovresti essere equipaggiato
Leggi più tardi Omnivore | Foschia in linea
Buco nero: il telescopio Event Horizon difende l’immagine del Sagittario A*