Quando un sito serve file (immagini, documenti, fogli di stile), un attaccante può provare un trucco antico ma sempre attuale: chiedere file che non dovrebbe poter vedere, "uscendo" dalle cartelle pubbliche. Si chiama path traversal, e si previene con una tecnica precisa.
Cos'è il path traversal
L'attacco sfrutta sequenze come ../ per risalire nelle cartelle del server. Una richiesta apparentemente innocua può così puntare a file di sistema o di configurazione:
GET /download?file=../../etc/passwd
Perché è pericoloso
Fuori dalle cartelle pubbliche ci sono file di configurazione, chiavi, credenziali. Un path traversal riuscito può esporre proprio i segreti che tengono in piedi l'applicazione.
La difesa: path containment
La regola è "contenere" ogni percorso dentro una cartella consentita. Si calcola il percorso assoluto richiesto e si verifica che inizi davvero dalla cartella pubblica; in caso contrario, si rifiuta:
const base = path.resolve('public');
const target = path.resolve(base, richiesto);
if (!target.startsWith(base)) return nega();
Validare sempre l'input
Il path containment fa parte di una regola più ampia: non fidarsi mai dell'input dell'utente. Ogni dato che arriva da fuori va controllato prima di essere usato.
Cosa significa per il tuo progetto
Significa che i tuoi file riservati e i segreti del server restano al sicuro, anche di fronte a richieste costruite ad arte. È una difesa che applico per impostazione predefinita. Contattami.
Collegato: proteggere i sorgenti e penetration testing.