La sicurezza web si è evoluta parallelamente alla complessità dei browser e delle tecnologie (HTML, JavaScript, DOM, AJAX). ## 1. Fondamenti: URL e HTTP * **URL:** Identifica una risorsa tramite protocollo, credenziali, server (IP/Hostname), porta, path e parametri. * **HTTP:** Protocollo stateless (senza memoria). * **GET:** Dati nell'URL (impliciti), non dovrebbe avere side-effect. * **POST:** Dati nel corpo della richiesta (espliciti), può avere side-effect. * **Status Code:** 1xx (info), 2xx (successo), 3xx (reindirizzamento), 4xx (errore client), 5xx (errore server). * **Cookie:** Coppie chiave-valore inviate dal server (`Set-cookie`) e memorizzate dal client per gestire lo stato della sessione. ## 2. SQL Injection (SQLi) Avviene quando l'input dell'utente viene concatenato direttamente in una query SQL. * **Obiettivo:** Modificare la logica della query per bypassare l'autenticazione o estrarre dati. * **Union-based SQLi:** Sfrutta l'operatore `UNION` per unire i risultati della query originale con quelli di una tabella scelta dall'attaccante. * *Tecnica:* Usare `ORDER BY` per indovinare il numero di colonne. * **Blind SQLi:** Il risultato non è visibile nella pagina. L'attaccante usa "oracoli" (es. la pagina cambia se la condizione è vera) o il tempo (es. `sleep(10)` se la condizione è vera) per indovinare i dati carattere per carattere. * **Information Schema:** Database meta-dati (in MySQL/PostgreSQL) usato per scoprire i nomi di tabelle e colonne. ### Mitigazione SQLi * **Whitelisting:** Accettare solo input conformi a una lista fissa. * **Sanitizzazione (Blacklisting/Escaping):** Rimuovere caratteri pericolosi (es. `'`, `;`). *Rischio:* Facilmente bypassabile con encoding diversi. * **Prepared Statements:** La soluzione migliore. Si definisce un template di query e si passano i parametri separatamente, impedendo al database di interpretarli come codice. * **ORM (Object-Relational Mapper):** Usare framework (es. CodeIgniter) che astrazgono le query. ## 3. Session Hijacking e CSRF ### Session Hijacking Furto del cookie di sessione tramite sniffing, attacchi al server o predizione (se l'ID di sessione non è abbastanza casuale). * **Esempio Twitter:** Usava un cookie `auth_token` statico che rimaneva valido anche dopo il logout. * **Difese:** Session ID lunghi e casuali, HTTPS, scadenza dei cookie. ### Cross-site Request Forgery (CSRF / C-Surf) L'attaccante induce il browser della vittima (già autenticata su un sito) a inviare una richiesta malevola verso quel sito. * **Mitigazione:** * **Referer check:** Verificare la provenienza della richiesta (ma può essere rimosso). * **Anti-CSRF Tokens:** Inserire un valore segreto e casuale in ogni form/link che il client deve restituire per validare la richiesta. ## 4. JavaScript e Same Origin Policy (SOP) La **SOP** è il pilastro della sicurezza dei browser: uno script può accedere solo a risorse (cookie, DOM) che hanno la stessa **origine** (schema + hostname + porta). ## 5. Cross-Site Scripting (XSS) Attacco per sovvertire la SOP iniettando script malevoli in una pagina web. * **Stored XSS (Persistent):** Lo script viene salvato sul server (es. in un profilo utente). * *Caso Samy (MySpace):* Uno script si auto-propagava nei profili dei visitatori, rendendo Samy "amico" di un milione di persone in 20 ore. * **Reflected XSS:** Lo script è contenuto in un URL e viene "riflettuto" dal server nella pagina di risposta (es. risultati di una ricerca). ### Mitigazione XSS * **Filtraggio/Escape:** Rimuovere tag `