← Tutti i controlli
SicurezzaGravità tipica: Medio

Segreti nei commenti HTML

Cerca chiavi, password o token dimenticati nei commenti dell'HTML che chiunque può leggere.

Cosa controlla

Questo scanner cerca all'interno dei commenti HTML chiavi, password o token che vi sono stati dimenticati. Rileva segreti scritti nei commenti che chiunque può vedere guardando il codice sorgente della pagina.

Perché è importante

I commenti HTML non sono privati: arrivano così come sono al browser e chiunque può leggerli con un paio di clic. Un segreto dimenticato lì equivale a pubblicarlo, e può dare accesso diretto a servizi o dati sensibili.

Come risolverlo

Rimuovi dal codice pubblicato qualsiasi commento contenente credenziali e, se un segreto è stato esposto, revocalo e generane uno nuovo il prima possibile. Conserva sempre le chiavi in variabili d'ambiente lato server, mai nell'HTML che vede il browser.

Come funziona questo controllo

Scanaris estrae tutti i commenti HTML della tua pagina principale, cioè tutto ciò che sta tra <!-- e -->, e vi cerca sei pattern di segreto. Quattro sono formati di chiave riconoscibili: chiavi segrete di Stripe (sk_live_ seguito da 20 o più caratteri), chiavi di accesso AWS (AKIA e 16 caratteri), chiavi API di Google (AIza e 35 caratteri) e intestazioni di chiave privata (-----BEGIN PRIVATE KEY----- e le varianti RSA o EC). Gli altri due sono assegnazioni esplicite: password, passwd o pwd seguiti da un valore di almeno 6 caratteri, e api_key, secret, token o bearer seguiti da un valore di almeno 16. Se qualcuno corrisponde, apre un rilievo di gravità alta che indica il tipo di segreto trovato, mai il valore. I pattern sono rigorosi apposta: un commento che dice "qui va il token" senza un valore dietro non viene segnalato.

Perché è importante

I commenti HTML non si vedono nella pagina, ma si vedono nel codice sorgente, e il codice sorgente lo vede chiunque con Ctrl+U o con un curl. Non c'è differenza pratica tra mettere una chiave in un commento e pubblicarla in un forum. Una chiave segreta di Stripe permette di creare addebiti e rimborsi; una di AWS, di usare il tuo account e la tua fattura; una password di database, di leggere tutto. E i cacciatori di segreti automatizzati percorrono tutto il web cercando esattamente questi prefissi, quindi il tempo tra la pubblicazione della chiave e il suo uso si misura in minuti.

Perché succede

Qualcuno si lascia una nota durante lo sviluppo ("<!-- utente admin / password Provvisoria2024 -->"), commenta un blocco di configurazione "per provare" invece di cancellarlo, o incolla un esempio di integrazione con la chiave vera. I template WordPress e i siti statici fatti a mano sono i più esposti, perché i loro commenti arrivano al browser così come sono. Nei framework moderni succede meno, ma succede: un commento in un .html statico della cartella pubblica o in un componente che non viene compilato.

Come risolvere

  • Ruota prima la credenziale. Dai per scontato che l'abbiano già letta. Generane una nuova dal fornitore, cambiala sul tuo server e revoca la vecchia. Poi cancella il commento; non il contrario.
  • Cerca nel progetto prima del deploy, non solo nella pagina principale:
grep -rnE "sk_live_|AKIA[0-9A-Z]{16}|AIza[0-9A-Za-z_-]{35}|BEGIN (RSA |EC )?PRIVATE KEY|(password|api_key|secret|token)\s*[:=]" --include=*.html --include=*.vue --include=*.php --include=*.hbs .
  • Elimina i commenti in produzione. Vue e Nuxt li tolgono in compilazione; in Next.js i commenti JSX non arrivano mai all'HTML. Per HTML statico o WordPress, un minificatore (html-minifier-terser con removeComments) o il plugin di ottimizzazione che usi li elimina. In PHP, usa commenti PHP (<?php // ... ?>), che non escono dal server.
  • Le credenziali vanno nelle variabili d'ambiente, mai in file che vengono serviti. E aggiungi un rilevatore di segreti al repository (gitleaks o la scansione segreti di GitHub) perché non rientrino.

Verifica che sia risolto

curl -s https://tuodominio.it | tr -d '\n' | grep -oE '<!--.{0,200}' | grep -iE "sk_live_|AKIA|AIza|PRIVATE KEY|password|api_key|secret|token|bearer"

Non deve uscire nulla. L'ideale è che la prima parte, senza l'ultimo filtro, non restituisca nemmeno commenti: in produzione non servono.

Domande frequenti

È una chiave di test, non di produzione.

I pattern distinguono: sk_test_ di Stripe non viene segnalato, sk_live_ sì. Se il rilievo è comparso, è perché il formato corrisponde a una chiave reale o a un'assegnazione esplicita di password. Se è davvero un valore fittizio, sostituiscilo con qualcosa che non sembri una credenziale, come DA_SOSTITUIRE.

Vengono controllati anche i commenti del JavaScript?

Questo controllo guarda solo l'HTML. Le chiavi dentro i bundle JavaScript, con o senza commento, le cerca segreti nel JavaScript, e i riferimenti a host interni riferimenti interni. Cos'altro trapela senza volerlo è in segreti che la tua app fa trapelare nel browser.

I commenti condizionali di Internet Explorer contano?

Sono commenti HTML e vengono analizzati allo stesso modo, ma non contengono segreti e non vengono segnalati. Comunque, nel 2026 sono zavorra: nessun browser supportato li interpreta.

Verificalo sul tuo sito

Scansiona il tuo sito gratis e scopri se questo e altri 44 controlli passano, con un prompt di fix per ogni problema.

Scansiona il mio sito gratis

Dal blog

Controlli correlati