XSS in React: dangerouslySetInnerHTML e script di terze parti
Comprenda come l’escaping predefinito di React previene l’XSS, quando dangerouslySetInnerHTML è pericoloso e come gli script di terze parti introducono rischi.
XSS in React: dangerouslySetInnerHTML e script di terze parti è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.
La protezione XSS integrata in React
React esegue automaticamente l'escape di tutti i valori renderizzati tramite JSX prima di inserirli nel DOM. Quando si scrive {userInput} in JSX, React esegue l'equivalente dell'assegnazione a textContent: il valore viene trattato come testo, mai come HTML. Per impostazione predefinita, questo previene la maggior parte degli attacchi XSS nelle applicazioni React.
Cosa fa dangerouslySetInnerHTML
dangerouslySetInnerHTML={{ __html: htmlString }} è il meccanismo di React che consente di aggirare l'escape automatico. Il nome è volutamente allarmante: indica che la responsabilità della sicurezza della stringa HTML ricade su chi la utilizza. React imposta direttamente innerHTML, eseguendo qualsiasi elemento HTML, inclusi script e gestori di eventi.
Utilizzi legittimi
dangerouslySetInnerHTML è realmente necessario quando si esegue il rendering di HTML proveniente da un editor di testo avanzato (come TipTap o Quill), da un CMS che memorizza HTML oppure da un convertitore da Markdown a HTML. Queste fonti producono un markup HTML reale che deve essere renderizzato come HTML, non come testo sottoposto a escape.
Il vettore d'attacco
Se la stringa HTML contiene <script>stealCookies()</script> oppure <img src=x onerror="stealData()">, impostarla come innerHTML esegue il codice dell'attaccante. Qualsiasi contenuto fornito dall'utente passato direttamente a dangerouslySetInnerHTML senza sanificazione costituisce una vulnerabilità XSS critica.
DOMPurify: il sanificatore standard
DOMPurify è il sanificatore HTML standard del settore per i browser. Analizza la stringa HTML in un contesto isolato, rimuove elementi e attributi pericolosi (tag script, gestori di eventi, URL javascript:) e restituisce una stringa HTML sicura. Utilizzo: DOMPurify.sanitize(dirtyHtml) prima di passare il risultato a dangerouslySetInnerHTML.
Rischi degli script di terze parti
Gli script di terze parti (strumenti di analisi, widget di chat, reti pubblicitarie) vengono eseguiti con gli stessi permessi del JavaScript dell'applicazione. Uno script di terze parti compromesso o dannoso può leggere document.cookie, accedere a localStorage, leggere i dati inseriti nei moduli e inviare richieste a server esterni, senza che l'utente ne abbia alcuna indicazione.
Content Security Policy come livello di difesa
La Content Security Policy è un'intestazione HTTP che dichiara quali script possono essere eseguiti. Anche se nel DOM viene iniettato un payload XSS, una CSP configurata correttamente può bloccarne l'esecuzione limitando gli script inline e consentendo solo le origini degli script inserite in una lista di autorizzazione. La CSP è la seconda linea di difesa dopo la sanificazione degli input.
Attacchi alla catena di distribuzione tramite npm
I pacchetti npm costituiscono un vettore reale per gli attacchi XSS. Una dipendenza può includere codice dannoso che esfiltra variabili d'ambiente o dati degli utenti. L'incidente node-ipc del 2022 e la compromissione di ua-parser-js del 2021 hanno dimostrato che pacchetti ampiamente utilizzati possono essere presi in controllo e contaminati. Verificare le dipendenze con npm audit e usare i lockfile.
Cosa fanno gli attaccanti con XSS
Un attacco XSS riuscito consente a un attaccante di sottrarre il token JWT dell'utente da sessionStorage (inviandolo a un server controllato dall'attaccante), eseguire azioni come l'utente autenticato (chiamate API usando la sessione dell'utente), modificare il DOM per visualizzare contenuti di phishing oppure registrare ogni tasto premuto dall'utente nell'applicazione.
API Trusted Types
L'API del browser Trusted Types richiede che tutti i sink del DOM (innerHTML, eval, script.src) ricevano oggetti tipizzati speciali anziché stringhe non elaborate. In questo modo impedisce ai payload XSS basati su stringhe di raggiungere il DOM a livello della piattaforma. React sta lavorando alla compatibilità con Trusted Types e la CSP può imporne l'uso.
Pattern sicuri per i contenuti del CMS
Il pattern sicuro per il rendering dell'HTML proveniente da un CMS è il seguente: recuperare l'HTML, passarlo a DOMPurify.sanitize() con una lista di autorizzazione di tag e attributi sicuri, quindi eseguire il rendering con dangerouslySetInnerHTML={{ __html: cleanHtml }}. Non saltare mai il passaggio di sanificazione, nemmeno quando il CMS è considerato affidabile, perché il database del CMS stesso potrebbe essere compromesso.
Scopo di DOMPurify
Cosa fa DOMPurify quando si chiama DOMPurify.sanitize(htmlString)?
Riepilogo della lezione
React esegue automaticamente l'escape dei valori JSX, prevenendo la maggior parte degli attacchi XSS. dangerouslySetInnerHTML aggira questa protezione per consentire il rendering legittimo di HTML: è sempre necessario sanificare prima l'input con DOMPurify. Gli script di terze parti e i pacchetti npm compromessi sono vettori XSS della catena di distribuzione. La Content Security Policy fornisce un secondo livello di difesa. Un attacco XSS riuscito consente di sottrarre token, impersonare utenti e mostrare contenuti di phishing.
Domande Frequenti
La lezione «XSS in React: dangerouslySetInnerHTML e script di terze parti» è gratuita?
Sì — il testo completo di «XSS in React: dangerouslySetInnerHTML e script di terze parti» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.
Cosa imparerò in «XSS in React: dangerouslySetInnerHTML e script di terze parti»?
Comprenda come l’escaping predefinito di React previene l’XSS, quando dangerouslySetInnerHTML è pericoloso e come gli script di terze parti introducono rischi. Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare React Academy?
Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «XSS in React: dangerouslySetInnerHTML e script di terze parti»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione React Academy?
Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- XSS in React: dangerouslySetInnerHTML e script di terze parti
- Protezione CSRF in React e nelle configurazioni API
- Content Security Policy per le app React
- Gestione dei segreti e variabili d’ambiente