Convalida degli input e codifica degli output
Convalidi tutti gli input lato server, codifichi gli output nel contesto corretto e prevenga le injection.
Convalida degli input e codifica degli output è una lezione Cyber Security 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 Cyber Security Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cyber Security Academy include 4 lezioni in totale.
Perché la validazione degli input è importante
Le vulnerabilità di injection — SQL, comandi, LDAP, XPath e altre — si verificano quando input non attendibili vengono interpretati come codice. La validazione degli input garantisce che i dati rispettino i tipi, le lunghezze e i formati previsti prima di essere elaborati, archiviati o restituiti.
Validazione tramite allowlist e denylist
La validazione tramite allowlist (whitelist) definisce ciò che è accettabile: solo caratteri alfanumerici, solo numeri interi nell'intervallo 1-100, solo formati di indirizzo email validi. La denylist (blacklist) cerca di bloccare gli input dannosi noti ed è sempre incompleta. Preferire le allowlist.
Validazione lato server
La validazione lato client migliora l'esperienza utente, ma non offre alcuna sicurezza: gli attaccanti la aggirano facilmente utilizzando gli strumenti per sviluppatori del browser o curl. Validare sempre lato server. La validazione lato client è una cortesia; quella lato server è il controllo di sicurezza.
Validazione degli input per diversi tipi di dati
Numeri: verificare il tipo e l'intervallo. Stringhe: verificare la lunghezza e il set di caratteri. Date: analizzarle in modo rigoroso e verificarne l'intervallo. File: verificare l'estensione E i magic byte/il tipo MIME — non fidarsi mai della sola estensione. URL: analizzare e validare lo schema, l'host e i componenti del percorso.
Le query parametrizzate prevengono la SQLi
Il risultato più importante della validazione degli input per i database è non concatenare mai l'input dell'utente nelle istruzioni SQL. Utilizzare query parametrizzate (prepared statement), passando l'input dell'utente come parametro anziché interpolarlo nella stringa della query.
// WRONG:
const q = "SELECT * FROM users WHERE name = '" + name + "'";
// RIGHT:
const q = "SELECT * FROM users WHERE name = $1";
await client.query(q, [name]);Contesti della codifica dell'output
La stessa stringa richiede una codifica diversa a seconda del contesto. Corpo HTML: codifica HTML (< > &). Attributo HTML: codifica dell'attributo HTML. JavaScript: escape JavaScript. Parametro URL: codifica URL (codifica percentuale). L'utilizzo della codifica errata lascia lacune che gli attaccanti possono sfruttare.
Codifica HTML contro XSS
Non inserire mai direttamente i dati dell'utente nell'HTML. Utilizzare un motore di template o una libreria che esegua automaticamente l'escaping dell'HTML. In React, {value} è sicuro; dangerouslySetInnerHTML elude l'escaping. In Django, i template eseguono automaticamente l'escaping, a meno che non si utilizzi esplicitamente il filtro safe.
Codifica nel contesto JavaScript
Quando si inseriscono dati in JavaScript (ad esempio in una variabile inizializzata con dati dell'utente), la codifica HTML non è sufficiente. Utilizzare la codifica JSON: JSON.stringify(value). Questo impedisce ai dati di uscire dal contesto di un literal di stringa JS.
Codifica degli URL
I dati forniti dall'utente inseriti negli URL devono essere codificati in percentuale utilizzando encodeURIComponent() (JS) o urllib.parse.quote() (Python). I dati non codificati possono manipolare la struttura dell'URL, causando redirect aperti o path traversal.
Content Security Policy come difesa a più livelli
La CSP aggiunge una seconda linea di difesa contro XSS. Una CSP rigorosa che utilizza i nonce impedisce l'esecuzione di script inline anche se viene inserito un payload XSS, perché il browser rifiuta di eseguire script privi dell'attributo nonce corretto.
Prevenzione dell'XSS basato sul DOM
Il DOM XSS si verifica quando JavaScript legge da fonti controllate dall'attaccante (location.hash, document.URL, cookie) e scrive in sink pericolosi (innerHTML, document.write, eval). Verificare tutti i flussi di dati dalle API del browser ai sink del DOM utilizzando strumenti di analisi statica.
Verifica delle conoscenze
Perché la validazione degli input lato server è essenziale anche quando è implementata la validazione lato client?
Riepilogo
La validazione degli input (allowlist, verifica dei tipi, limiti di lunghezza), combinata con la codifica dell'output sensibile al contesto (HTML, JS, URL, parametrizzazione SQL), costituisce la principale difesa contro gli attacchi di injection e XSS. Entrambe devono essere applicate lato server, senza eccezioni.
Domande Frequenti
La lezione «Convalida degli input e codifica degli output» è gratuita?
Sì — il testo completo di «Convalida degli input e codifica degli output» è 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 Cyber Security Academy, passa a CoddyKit PRO. Il corso Cyber Security Academy include 4 lezioni in totale.
Cosa imparerò in «Convalida degli input e codifica degli output»?
Convalidi tutti gli input lato server, codifichi gli output nel contesto corretto e prevenga le injection. Eserciti Cyber Security 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 Cyber Security Academy?
Non è richiesta alcuna esperienza precedente. Cyber Security 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 «Convalida degli input e codifica degli output»?
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 Cyber Security Academy?
Sì. Ogni lezione Cyber Security 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
- Convalida degli input e codifica degli output
- Gestione sicura delle dipendenze
- OWASP ASVS: Application Security Verification Standard
- Tecniche di code review sicura