Come funziona questo controllo
Scanaris legge gli header della risposta principale della tua pagina e ne guarda due in particolare. Se esiste X-Powered-By con qualsiasi valore (per esempio Express, PHP/8.2.12 o Next.js), apre un rilievo di gravità bassa. Se esiste Server e il suo valore contiene un numero di versione (qualcosa come nginx/1.18.0 o Apache/2.4.57), ne apre un altro. Un semplice Server: nginx o Server: cloudflare non viene segnalato: dire quale server usi non è un problema; dire esattamente quale versione, sì.
Perché è importante
Nessuno di questi due header serve a qualcosa per l'utente o per il browser. Esistono per abitudine. Quello che fanno è risparmiare lavoro a chi cerca una vulnerabilità: con PHP/7.4.3 o Apache/2.4.49 nella risposta, l'attaccante non deve indovinare nulla, va dritto alla lista delle falle note di quella versione e prova quelle con exploit pubblico. È un rilievo di gravità bassa perché da solo non apre nessuna porta; ma è tra i più facili da chiudere, e gli scanner di massa filtrano i loro bersagli proprio su questi header.
Come rimuoverli a seconda del tuo stack
- Express:
app.disable('x-powered-by')alla creazione dell'app, oppure usahelmet(), che lo rimuove insieme ad altri irrobustimenti. - Next.js: invia
X-Powered-By: Next.jsdi default. Innext.config.js,poweredByHeader: false. - PHP: in
php.ini,expose_php = Off. Su hosting condiviso di solito si può cambiare dal pannello o con un.user.ini. - ASP.NET: in
web.config, dentrocustomHeaders,<remove name="X-Powered-By" />, e in IIS disattiva anche l'headerX-AspNet-VersionconenableVersionHeader="false". - nginx:
server_tokens off;nel bloccohttp. Continua a dire "nginx", ma senza versione. - Apache:
ServerTokens ProdeServerSignature Offnella configurazione principale. ConProdl'header diventa semplicementeApache. - Vercel, Netlify, Cloudflare Pages: non inviano versione in
Server. Se vediX-Powered-Bylì, viene dal tuo framework (Next.js o Express), non dalla piattaforma.
Se hai un proxy o una CDN davanti (Cloudflare, un bilanciatore), controlla la risposta pubblica: a volte il proxy sostituisce l'header Server e il problema sparisce da solo, ma X-Powered-By di solito passa intatto.
Verifica che sia risolto
curl -sI https://tuodominio.it | grep -iE "^(server|x-powered-by):"
L'ideale è che X-Powered-By non compaia e che Server, se compare, non porti numeri. Prova anche una rotta dell'API o una pagina di errore (un URL che non esiste): gli errori a volte vengono generati in un altro livello che aggiunge di nuovo l'header.
Domande frequenti
Nascondere la versione non risolve la vulnerabilità. A cosa serve?
A non essere nella prima pagina dei risultati di chi cerca vittime. Hai ragione che la soluzione vera è aggiornare: nascondere la versione è il complemento, non il sostituto. Le due cose insieme costano cinque minuti.
Il mio hosting non mi lascia toccare la configurazione del server.
In quel caso, rimuovi almeno X-Powered-By dal tuo codice o dal tuo .htaccess (Header unset X-Powered-By) e chiedi all'hosting di nascondere la versione. Gli altri header di sicurezza, quelli che dovresti avere, sono esaminati dal controllo header di sicurezza.
Perché "Server: cloudflare" non viene segnalato?
Perché non rivela nulla di sfruttabile: né versione né software specifico dietro. Quello che si cerca qui è informazione che accorci la strada verso un exploit. Quali header conviene avere e quali sono solo rumore lo spiega header HTTP spiegati per umani.