Il check di superficie guarda la tua app come la vede il browser di qualunque visitatore — da fuori, senza accedere — e trasforma ciò che vede in quattro punteggi e un breve elenco di problemi. Dura pochi secondi e non tocca mai i tuoi dati.
Cosa fa il check#
- Un indirizzo alla volta, e solo quando lo chiede il proprietario (o chi ha la sua autorizzazione).
- Solo ciò che è già pubblico: la home page, i file JavaScript che carica, le intestazioni della risposta, i record DNS pubblici e il certificato TLS.
- Niente viene modificato e niente di ciò che troviamo viene usato: nessun accesso con credenziali, nessuna chiave provata, nessun dato letto dal tuo database.
- Quattro punteggi separati: Sicurezza, Performance, Accessibilità e SEO. Non li mescoliamo in un numero unico, così vedi dove sta il problema.
Chi può richiedere un check#
Chiunque può avviare il check di superficie, ma solo su un’app di cui è proprietario o che è autorizzato a far analizzare. Prima che il check parta spunti una casella che conferma proprio questo; senza la spunta non parte nulla. Registriamo la conferma, la versione del testo che hai accettato e l’orario.
Teniamo il check di superficie volutamente leggero, perché una dichiarazione falsa non possa fare danni: legge solo ciò che qualunque browser riceve già, accetta al massimo 3 check all’ora sullo stesso sito, chiunque li chieda (tranne il proprietario, una volta provata la proprietà), rispetta il robots.txt del sito e si presenta con il proprio nome. Tutto ciò che va oltre la superficie pubblica richiede più di una spunta: il check approfondito parte solo dopo che il proprietario ha dimostrato di controllare il sito, e l’audit completo solo con la sua autorizzazione esplicita.
Cosa succede durante un check#
- Validiamo la richiesta. L’indirizzo deve essere un sito pubblico sulle porte web standard; reti private e indirizzi interni vengono rifiutati.
- Leggiamo prima il
robots.txtdel sito. Se chiede agli strumenti automatici di non leggere la home page, ci fermiamo e te lo diciamo. - Carichiamo la home page e i file JavaScript del sito dichiarati dalla pagina — fino a 40 file, entro un totale di 20 secondi e 20 MB per l’intero check. Gli script di altre aziende non vengono scaricati.
- Sul tuo dominio consultiamo i record pubblici: il certificato TLS e i record DNS che proteggono la tua email (SPF, DMARC, MTA-STS, TLS-RPT) e i tuoi certificati (CAA). Sul sottodominio di un builder sono della piattaforma, quindi li saltiamo.
- Calcoliamo i punteggi e ti mostriamo il referto. Il check conserva solo i risultati, mai il contenuto delle tue pagine.
Il check di superficie chiede solo ciò che un browser carica quando apre la tua home page per la prima volta. Non chiede mai se esistono file come /.env, /.git/config, le tue source map, /sitemap.xml, /.DS_Store, /.htpasswd o la documentazione della tua API, e non chiede mai al tuo server come risponde agli altri siti (CORS): nessun browser li chiede, e spuntare la casella non prova che il sito sia tuo. Quelle domande appartengono al check approfondito, dopo che il proprietario ha dimostrato di controllare il sito. Lì leggiamo solo il codice di risposta e gli header, mai il file, e se uno di quei file sembra esserci chiediamo anche un indirizzo che non può esistere, così un sito che risponde allo stesso modo a qualunque indirizzo non viene segnalato per errore.
Cosa non facciamo mai#
- Leggere, copiare o conservare dati del tuo database.
- Usare una chiave, una password o un token che troviamo. Segnaliamo che è visibile; non lo proviamo mai.
- Scaricare file di configurazione, codice sorgente o source map. L’unica eccezione è il check approfondito su un sito il cui proprietario ha dimostrato di controllarlo e ha spuntato una casella apposta: lì leggiamo le source map in memoria, solo per indicare il file e la riga di una chiave esposta. Conserviamo il tipo di chiave, il file, la riga e un frammento accorciato della chiave, mai il codice e mai la chiave intera. Se il proprietario spunta un’altra casella apposta, usiamo lo stesso codice in memoria per misurare il codice non usato e le librerie incluse più volte. Lì conserviamo i percorsi dei file (senza nomi utente), i nomi e le versioni delle librerie e le dimensioni in byte, mai il codice.
- Indovinare nomi di file o di tabelle, o esplorare altre pagine. L’unica eccezione è il controllo di accessibilità sulle pagine rese, parte del check approfondito su un sito il cui proprietario ha dimostrato di controllarlo e ha spuntato una casella apposta: lì un browser isolato apre al massimo 10 pagine di quell’hostname esatto — la home page e le pagine a cui porta, fino a 2 link di distanza, ognuna permessa da
robots.txt— e ne esegue il JavaScript per vedere ciò che vede un visitatore. Non raggiunge nessun altro sito, invia solo letture di pagina (niente moduli, caricamenti di file o messaggi), e conserviamo solo i percorsi delle pagine e le misure, mai il contenuto. - Registrare le richieste di rete delle tue pagine. L’unica eccezione è il controllo della rete, parte del check approfondito su un sito il cui proprietario ha dimostrato di controllarlo e ha spuntato una casella apposta: lì un browser isolato, con lo stesso nome, apre una volta la home page di quell’hostname esatto, se
robots.txtlo permette, ne esegue il JavaScript e registra le richieste che fa nei primi secondi dopo il caricamento, senza cliccare niente. Non raggiunge nessun altro sito — le richieste verso altri servizi partono e lì si fermano, e gli script di altre aziende non si caricano — e invia solo letture di pagina (niente moduli, caricamenti di file o messaggi). Conserviamo metodi, indirizzi senza i loro valori, nomi dei parametri e delle intestazioni, host di terzi e se un valore sembrava un dato personale; mai i valori e mai il contenuto. - Accedere con credenziali, inviare moduli o modificare qualunque cosa.
- Mandare dati del tuo sito ad altre aziende. L’unica eccezione è il check approfondito su un sito il cui proprietario ha dimostrato di controllarlo, e solo per le caselle che spunta, ognuna a parte: l’indirizzo del sito a un insieme pubblico di dati sulla velocità per i visitatori reali, il nome del dominio al registro della sua estensione (registrazione e scadenza), il nome host alla lista HTTPS pubblica dei browser, nome e versione esatta delle librerie che riconosciamo (oggi Next.js e Angular) a un database aperto di segnalazioni di sicurezza (vulnerabilità note), il nome del dominio a un database pubblico di violazioni di dati note, e il nome del dominio, o l’indirizzo completo su un sottodominio di un builder, a una piattaforma pubblica di codice (chiavi in codice pubblico). Ognuno riceve solo questo; l’informativa privacy dice cosa conserviamo di ogni risposta.
- Nascondere chi siamo: ogni richiesta porta il nome
Root92-MigrationScannere un link alla nostra pagina «Che cos’è lo scanner».
I tuoi punteggi, spiegati#
| Punteggio | Cosa ti dice | Come si calcola |
|---|---|---|
| Sicurezza (0–100) | Quante debolezze potrebbe sfruttare un estraneo, e quanto l’app è legata alla sua piattaforma. | Parte da 100. Ogni problema trovato toglie un numero fisso di punti (vedi l’elenco sotto). Non scende mai sotto 0. |
| Performance (0–100) | Quanto è pesante e veloce la tua home page. | Cinque misure, ognuna valutata da 0 a 100 e pesata: tempo di risposta del server 40%, peso del JavaScript 30%, numero di file JavaScript 10%, peso dell’HTML 10%, rendering lato server 10%. |
| Accessibilità (mostrata come problemi) | Le barriere più comuni per chi usa screen reader o tastiera. | Sei controlli sul codice HTML, pesati secondo la gravità della barriera. Il referto mostra quanti non sono superati. |
| SEO (mostrata come problemi) | Se i motori di ricerca possono indicizzare la home page e presentarla bene. | Tredici controlli; ogni problema toglie punti da 100. Il referto mostra quanti ne abbiamo trovati. |
- «Punteggio ≤ N» significa che non abbiamo finito di leggere la tua app entro il limite di tempo o di dimensione. Ciò che non abbiamo letto può nascondere altri problemi, quindi il punteggio reale può solo essere più basso.
- «Non misurato» significa che il controllo non ha potuto girare — di solito perché la pagina è costruita interamente nel browser e il suo HTML è vuoto finché non gira il JavaScript.
- I controlli SEO sono l’eccezione: leggono l’HTML esattamente come lo manda il tuo server. Su una pagina costruita interamente nel browser, quindi, un
<h1>mancante può essere segnalato anche quando la pagina finita ne mostra uno. - App sul sottodominio di un builder: dominio, email e certificato sono della piattaforma, non tuoi, quindi non li contiamo a tuo sfavore.
- Nessun punteggio viene mostrato se non siamo riusciti a raggiungere il sito, o se il suo
robots.txtci ha chiesto di non leggerlo. Il check di superficie non ti chiede i contatti, quindi non ti scriveremo noi: se vuoi che lo guardiamo, scrivici dal modulo «Scrivici» della home page.
Cosa controlliamo#
Il referto di superficie mostra subito i problemi più importanti. Gli altri sono conteggiati nel punteggio ed elencati nell’audit completo.
Sicurezza — piattaforma e backend
| Controllo | Cosa guardiamo | Punti | Dove |
|---|---|---|---|
| Costruita con un site builder | Segni di Lovable, Bolt, v0, Replit, Base44, Framer, Webflow, Wix, Squarespace, Shopify, WordPress, Bubble, Softr, Glide, Retool o un altro builder AI | 12 | Referto di superficie |
| Ospitata sul sottodominio della piattaforma | L’app risponde sull’indirizzo del builder (conta al posto della riga precedente, non in aggiunta) | 12 | Referto di superficie |
| Backend Supabase | Un indirizzo Supabase nella pagina o nei suoi script | 16 | Referto di superficie |
| Backend Firebase | Un indirizzo Firebase nella pagina o nei suoi script | 16 | Referto di superficie |
Sicurezza — chiavi e file esposti
| Controllo | Cosa guardiamo | Punti | Dove |
|---|---|---|---|
| Chiave di servizio del database nel browser | Una chiave Supabase con pieni diritti di amministrazione nel tuo codice pubblico | 45 | Referto di superficie |
| Chiave del database nel browser | La tua chiave pubblica Supabase. È sicura solo se la row-level security protegge ogni tabella | 34 | Referto di superficie |
| Altre chiavi segrete nel codice | Chiavi segrete di servizi come Stripe, AWS, OpenAI, Anthropic, GitHub, Slack, SendGrid, Twilio o Google, o certificati privati | 40 | Referto di superficie |
| Credenziali di un database o di un servizio in un URL | Un indirizzo con utente e password (utente:password@host) di un server raggiungibile da internet | 40 | Referto di superficie |
| Chiave di un servizio email nel codice | Una chiave API di Resend, Mailchimp o Brevo | 40 | Referto di superficie |
| Token di un sistema di pagamento nel codice | Un token di accesso o un segreto OAuth di Square | 40 | Referto di superficie |
| Chiave di un servizio di AI nel codice | Una chiave API di Hugging Face, Replicate, Groq, OpenRouter, xAI o Perplexity | 40 | Referto di superficie |
| Token di un repository di codice nel codice | Un token di GitLab, npm o Bitbucket | 40 | Referto di superficie |
| Credenziale cloud nel codice | Un token DigitalOcean o la chiave di un account di archiviazione Azure | 40 | Referto di superficie |
| Segreto OAuth nel codice | Il segreto di un client OAuth di Google | 40 | Referto di superficie |
| Token di amministrazione del negozio nel codice | Un token di amministrazione o di app Shopify | 40 | Referto di superficie |
| Token di uno strumento di lavoro nel codice | Un token API di Airtable, Notion o Linear | 40 | Referto di superficie |
| Webhook di una chat nel codice | Un webhook Slack o Discord, o il token di un bot Telegram: chiunque potrebbe scrivere a nome tuo | 12 | Audit completo |
| Indirizzo interno nel codice | Un indirizzo completo verso un IP privato o un nome interno (localhost non conta: molte librerie lo portano di serie) | 1 | Audit completo |
| API o WebSocket senza cifratura | Un’API chiamata su http:// o un WebSocket aperto su ws:// | 2 | Audit completo |
File .env raggiungibile | Se il tuo file di ambiente può essere scaricato da chiunque. Si controlla solo nel check approfondito, dopo che hai dimostrato che il sito è tuo | 40 | Audit completo |
http:// in chiaro non rimandato a https:// | La tua home page risponde ancora su http:// senza cifratura invece di rimandare. Si controlla solo nel check approfondito, dopo che hai dimostrato che il sito è tuo | 3 | Audit completo |
Cartella .git raggiungibile | Se la cronologia del tuo codice può essere scaricata da chiunque. Si controlla solo nel check approfondito, dopo che hai dimostrato che il sito è tuo | 40 | Audit completo |
| Source map pubbliche | Se il sorgente originale dei tuoi script può essere scaricato. Si controlla solo nel check approfondito, dopo che hai dimostrato che il sito è tuo | 8 | Audit completo |
File delle password raggiungibile (.htpasswd) | Se il file delle password del tuo server web può essere scaricato da chiunque. Si controlla solo nel check approfondito, dopo che hai dimostrato che il sito è tuo | 12 | Audit completo |
File di metadati delle cartelle raggiungibile (.DS_Store) | Se un file di macOS che elenca le tue cartelle può essere scaricato da chiunque. Si controlla solo nel check approfondito, dopo che hai dimostrato che il sito è tuo | 2 | Audit completo |
| Documentazione dell’API raggiungibile pubblicamente | Se un file OpenAPI o Swagger che descrive la tua API risponde al suo indirizzo predefinito. Si controlla solo nel check approfondito, dopo che hai dimostrato che il sito è tuo | 2 | Audit completo |
Sicurezza — protezioni del browser
| Controllo | Cosa guardiamo | Punti | Dove |
|---|---|---|---|
| Cookie non sicuri | Cookie impostati senza i flag Secure, HttpOnly o SameSite | 4 | Audit completo |
| Content-Security-Policy assente | L’intestazione che limita quali script possono girare | 2 | Audit completo |
| HSTS assente | L’intestazione che obbliga i browser a usare HTTPS | 2 | Audit completo |
| Protezione dal clickjacking assente | Protezione contro l’inserimento della tua pagina in un altro sito | 2 | Audit completo |
| CORS aperto a qualunque sito | Risposte leggibili dagli script di qualunque altro sito | 2 | Audit completo |
| CORS si fida di qualunque sito con le credenziali | Sulla tua home page, il tuo server ricopia nella risposta CORS l’indirizzo di qualunque sito e permette i cookie del visitatore. Proviamo solo la home page, non le tue API. Si controlla solo nel check approfondito, dopo che hai dimostrato che il sito è tuo | 4 | Audit completo |
| Contenuto misto | Una pagina HTTPS che carica immagini o script in HTTP semplice | 2 | Audit completo |
| X-Content-Type-Options assente | L’intestazione che impedisce ai browser di indovinare il tipo di file | 2 | Audit completo |
| Referrer-Policy assente | Il controllo su quanta parte dei tuoi indirizzi viene condivisa con altri siti | 1 | Audit completo |
| Permissions-Policy assente | Limiti su fotocamera, microfono, posizione e funzioni simili | 1 | Audit completo |
| Script da un dominio compromesso | Uno script caricato da un dominio che ha servito codice malevolo, come polyfill.io | 40 | Referto di superficie |
| Password inviata senza cifratura | Un campo password su una pagina o in un modulo che non sono in HTTPS | 8 | Audit completo |
| jQuery fuori supporto | jQuery 1.x o 2.x, che non ricevono più correzioni di sicurezza | 3 | Audit completo |
| Script di terze parti senza controllo d’integrità | Script di un altro dominio senza l’attributo integrity | 2 | Audit completo |
| Modulo inviato senza cifratura | Un modulo che invia i dati a un indirizzo http:// | 2 | Audit completo |
| Errore tecnico mostrato nella pagina | Uno stack trace o la pagina d’errore di un framework nella home page | 2 | Audit completo |
| HSTS troppo breve | Un header HSTS che dura meno di sei mesi | 1 | Audit completo |
| La Content-Security-Policy permette script inline | Una policy il cui script-src ammette 'unsafe-inline' o 'unsafe-eval' | 1 | Audit completo |
Content-Security-Policy senza base-uri | Una policy che non limita dove può puntare un tag <base> | 1 | Audit completo |
| Cross-Origin-Opener-Policy assente | L’header che isola la tua pagina dalle finestre di altri siti | 1 | Audit completo |
| Versione del software negli header | Un numero di versione negli header Server o X-Powered-By | 1 | Audit completo |
| Cookie su una pagina in cache pubblica | La pagina scrive un cookie di sessione o di accesso (dal nome, o perché è HttpOnly) e insieme si lascia conservare dalle cache condivise (CDN, proxy) | 4 | Audit completo |
| ID di sessione nei link della pagina | Un link o un form del tuo sito con un identificativo di sessione nell’indirizzo, per esempio PHPSESSID= o jsessionid=, o un form con un campo nascosto PHPSESSID | 3 | Audit completo |
| Pagina di accesso conservabile in cache | Una pagina con un campo password che non manda Cache-Control: no-store, quindi browser e proxy possono conservarne una copia (no-cache, private o max-age=0 da soli non lo impediscono) | 2 | Audit completo |
| Header di debug | Un header di uno strumento di debug o di profiling, per esempio X-Debug-Token | 2 | Audit completo |
| HSTS senza sottodomini | Un header HSTS sul tuo dominio principale senza includeSubDomains. Non conta sotto .app, .dev e le altre estensioni che i browser portano già in HTTPS, né sull’indirizzo di una piattaforma di hosting. Si giudica solo quando l’analisi finisce sul dominio principale stesso: su www. la risposta del dominio principale non la leggiamo, quindi il controllo non è esaminato | 1 | Audit completo |
| Content-Security-Policy che si fida di host di codice pubblici | Una policy il cui script-src permette un host da cui chiunque può pubblicare o richiamare codice: jsDelivr, unpkg, cdnjs, esm.sh, Skypack, JSPM, ajax.googleapis.com, www.google.com o apis.google.com. Non conta con strict-dynamic, che fa ignorare gli host ai browser | 1 | Audit completo |
| Cookie condiviso con ogni sottodominio | Un cookie il cui attributo Domain copre tutto il tuo dominio, quindi leggibile da ogni sottodominio. Non conta sul sottodominio di un builder o sull’indirizzo di una piattaforma di hosting, e i cookie anti-bot delle CDN non contano | 1 | Audit completo |
| Indirizzo interno negli header | Un indirizzo IP privato o il nome di un server interno in un header di risposta | 1 | Audit completo |
Sicurezza — certificato, dominio ed email (solo sul tuo dominio)
| Controllo | Cosa guardiamo | Punti | Dove |
|---|---|---|---|
| TLS obsoleto o certificato in scadenza | Cifratura precedente a TLS 1.2, o un certificato che scade entro 30 giorni | 12 | Audit completo |
| Record SPF assente | Quali server possono inviare email per il tuo dominio | 6 | Audit completo |
| Record DMARC assente | La tua policy contro l’impersonificazione via email | 6 | Audit completo |
| DMARC solo in osservazione | Una policy DMARC che osserva ma non blocca (p=none) | 3 | Audit completo |
| Il dominio non riceve email | Nessun server di posta pubblicato per il tuo dominio | 2 | Audit completo |
| Record CAA assente | Quali autorità possono emettere certificati per il tuo dominio | 1 | Audit completo |
| SPF che permette a chiunque di inviare | Un record SPF che finisce con +all o ?all | 3 | Audit completo |
| MTA-STS assente | Il record che obbliga i server di posta a consegnare al tuo dominio solo con cifratura, se il dominio riceve email | 1 | Audit completo |
| TLS-RPT assente | Il record che chiede ai server di posta di segnalare le consegne cifrate non riuscite al tuo dominio, se il dominio riceve email. Più di un record, o uno senza un indirizzo rua utilizzabile, vale come assente | 1 | Audit completo |
| Record SPF non valido | Un record SPF che richiede più di 10 ricerche DNS, contando i record che include, e che i server di posta trattano quindi come rotto | 1 | Audit completo |
| Versioni TLS vecchie accettate | Il server accetta ancora TLS 1.0 o 1.1. Non ancora attivo: il risultato resta «non esaminato» e i punti non si tolgono mai. Il check approfondito mostra già a parte le versioni TLS accettate, senza punti (vedi sotto) | 8 | Audit completo |
| Problema nella catena del certificato | Una catena del certificato incompleta, autofirmata o non riconosciuta. Non ancora attivo: il risultato resta «non esaminato» e i punti non si tolgono mai. Il check approfondito mostra già a parte la catena, senza punti (vedi sotto) | 8 | Audit completo |
| Cifrari TLS deboli | Suite TLS 1.2 senza forward secrecy, o in modalità CBC. Non ancora attivo: il risultato resta «non esaminato» e i punti non si tolgono mai. Il check approfondito mostra già a parte le suite di cifratura, senza punti (vedi sotto) | 2 | Audit completo |
| Dominio senza DNSSEC | Il dominio non è firmato con DNSSEC, letto dalla sua registrazione pubblica. Non ancora attivo: il risultato resta «non esaminato» e il punto non si toglie mai | 1 | Audit completo |
- Nel check approfondito, se il proprietario spunta la sua casella e il server è suo e non di una piattaforma condivisa, guardiamo la cifratura più da vicino: al massimo 7 connessioni TLS in più verso quel server, una dopo l’altra, entro 20 secondi, senza chiedere nessuna pagina. Mostrano quali versioni di TLS il server accetta, se permette ancora suite di cifratura senza forward secrecy o in modalità CBC, se la catena del certificato è completa e se il server allega il suo stato di revoca. Il referto le mostra a parte; non cambiano il punteggio di sicurezza. Due sono anche nominate fra le finding del proprietario, senza punti: un server che non accetta TLS 1.3, quando la connessione che prova solo TLS 1.3 viene rifiutata, e un certificato revocato solo quando lo dice lo stato di revoca allegato dal server, con la firma valida della tua autorità di certificazione e ancora in corso di validità — senza, non chiediamo all’autorità di certificazione, e non lo diciamo.
Performance
| Misura | Cosa misuriamo | Buono → scarso |
|---|---|---|
| Tempo di risposta del server (40%) | Il tempo prima che il server inizi a rispondere | sotto 200 ms → oltre 800 ms |
| Peso del JavaScript (30%) | La dimensione totale dei tuoi script | sotto 300 KB → oltre 1,5 MB |
| File JavaScript (10%) | Quanti file di script tuoi vengono caricati | 3 o meno → 20 o più |
| Peso dell’HTML (10%) | La dimensione del codice HTML della home page | sotto 15 KB → oltre 100 KB |
| Rendering lato server (10%) | Se il contenuto è già nell’HTML | sì = 100 · no = 60 |
Accessibilità
| Controllo | Perché conta | Peso |
|---|---|---|
| Le immagini hanno un testo alternativo | Gli screen reader possono descriverle | Alto ×3 |
| I campi dei moduli hanno un’etichetta | Chi compila sa cosa scrivere | Alto ×3 |
| I pulsanti hanno un nome | Anche i pulsanti con sola icona vengono letti | Alto ×3 |
| I link hanno un testo leggibile | Si capisce dove porta il link | Medio ×2 |
| La pagina dichiara la sua lingua | Il testo viene letto con la pronuncia giusta | Medio ×2 |
| I livelli dei titoli non saltano | La struttura della pagina è navigabile | Basso ×1 |
- Nel check approfondito, se il proprietario spunta la sua casella, gli stessi sei controlli girano anche su al massimo 10 pagine come le mostra un browser isolato, insieme a tre che solo un browser può misurare: il contrasto del testo, l’ordine del fuoco da tastiera e lo stato dei controlli. Il referto li mostra a parte, con il numero di pagine coperte; non cambiano il risultato di accessibilità qui sopra.
SEO
| Controllo | Punti |
|---|---|
| La pagina chiede ai motori di ricerca di non indicizzarla | −40 |
| Titolo assente | −15 |
| Impostazione viewport per mobile assente | −12 |
| Meta description assente | −10 |
| Nessun titolo principale (H1) | −10 |
| Nessun link canonical | −5 |
| Più di un H1 | −5 |
| Nessuna anteprima social (Open Graph) | −5 |
| Titolo più corto di 10 o più lungo di 60 caratteri | −4 |
| Descrizione più corta di 50 o più lunga di 160 caratteri | −4 |
robots.txt assente o vuoto | −3 |
| Nessuna sitemap dichiarata né trovata | −3 |
| Alternative di lingua (hreflang) incomplete | −3 |
Controlli per la tua tecnologia (senza punteggio)
Quando riconosciamo la tecnologia con cui è costruito il sito, e solo quando ne siamo sicuri, girano alcuni controlli in più sugli stessi file già scaricati — nessuna richiesta aggiuntiva. Compaiono in una sezione a parte del referto e non cambiano il punteggio di sicurezza. Se non ne siamo sicuri, il referto lo dice e questi controlli non girano. Una versione che non troviamo nelle nostre tabelle è riportata come sconosciuta, mai come aggiornata.
| Controllo | Tecnologia | Gravità | Dove si vede |
|---|---|---|---|
| Versione di WordPress con una vulnerabilità nota | WordPress | Critica | Referto di superficie |
| Plugin di WordPress con una vulnerabilità nota | WordPress | Critica | Referto di superficie |
| WordPress obsoleto | WordPress | Alta | Referto di superficie |
| Plugin di WordPress obsoleto | WordPress | Alta | Referto di superficie |
| Versione di WordPress dichiarata in pagina | WordPress | Media | Audit completo |
| XML-RPC di WordPress pubblicizzato | WordPress | Media | Audit completo |
| Tema di WordPress obsoleto | WordPress | Media | Audit completo |
| WooCommerce obsoleto | WooCommerce | Alta | Referto di superficie |
| Carrello ricaricato a ogni pagina | WooCommerce | Media | Audit completo |
| Troppe app che caricano script nel negozio | Shopify | Media | Audit completo |
| Pagina e tema di Shopify pesanti | Shopify | Media | Audit completo |
| Magento 1, a fine vita | Magento | Critica | Referto di superficie |
| Drupal a fine vita | Drupal | Alta | Referto di superficie |
| Versione di Drupal dichiarata | Drupal | Media | Audit completo |
| Joomla a fine vita | Joomla | Alta | Referto di superficie |
| Versione di Joomla dichiarata | Joomla | Media | Audit completo |
| Versione di Next.js con una vulnerabilità nota | Next.js | Critica | Referto di superficie |
| Next.js obsoleto | Next.js | Alta | Referto di superficie |
| Next.js in modalità sviluppo in produzione | Next.js | Alta | Referto di superficie |
| Variabili pubbliche di Next.js con nomi da segreto | Next.js | Alta | Referto di superficie |
| Pagina con cookie messa in cache condivisa | Next.js | Alta | Audit completo |
| Header X-Powered-By di Next.js | Next.js | Media | Audit completo |
| File statici di Next.js senza cache lunga | Next.js | Media | Audit completo |
| Nuxt 2, a fine vita | Nuxt | Alta | Referto di superficie |
| Nuxt in modalità sviluppo in produzione | Nuxt | Alta | Referto di superficie |
| Configurazione pubblica di Nuxt con nomi da segreto | Nuxt | Alta | Referto di superficie |
| Angular fuori supporto | Angular | Alta | Referto di superficie |
| Angular in modalità sviluppo | Angular | Alta | Referto di superficie |
| App Angular in un solo blocco | Angular | Media | Audit completo |
| Vue 2, a fine vita | Vue | Alta | Referto di superficie |
| Vue in versione di sviluppo | Vue | Alta | Referto di superficie |
| React in versione di sviluppo | React | Alta | Referto di superficie |
| Server di sviluppo aperto su Internet | React | Alta | Referto di superficie |
| Variabili d’ambiente con nomi da segreto nel bundle | React | Alta | Referto di superficie |
| App React in un solo blocco pesante | React | Media | Audit completo |
| Strumenti di debug di Laravel visibili dalla home | Laravel | Critica | Referto di superficie |
| Versione di ASP.NET negli header | ASP.NET | Media | Audit completo |
| ViewState di ASP.NET molto pesante | ASP.NET | Media | Audit completo |
| Identificativo di sessione negli indirizzi | Spring | Media | Audit completo |
Privacy e tecnologia (senza punteggio)
- Tracker prima del consenso — tracker pubblicitari e di analisi (Google, Meta, Hotjar, TikTok, LinkedIn, X, Pinterest, Snapchat, Microsoft Clarity, Yandex) che si caricano prima che il visitatore possa acconsentire. Mostrato nel referto di superficie.
- Strumento di consenso ai cookie — se è presente un banner di consenso riconosciuto.
- Link alla privacy policy — se la home page ne collega una.
- Panoramica tecnologica — framework, hosting, strumenti di analisi e numero di servizi esterni. Contesto per la migrazione, non un problema in sé.
Cosa un check automatico non può vedere#
Il check di superficie guarda solo la tua home page, da fuori. Non vede le aree riservate, le altre pagine, le regole del tuo database, le query lente o come il tuo codice tratta i dati. Dove un controllo dipende da contenuti che compaiono solo dopo l’esecuzione del JavaScript, scriviamo «non misurato» invece di fare ipotesi. L’audit completo copre ciò che il check di superficie non vede: lo svolge il nostro team, con l’accesso che ci concedi, tabella per tabella — e anche lì non leggiamo mai i tuoi dati.
Domande frequenti#
Il check rallenta il mio sito?
No. È una sola visita breve, con un limite fisso di tempo e di dimensione: paragonabile a un visitatore che apre la tua home page.
Avete trovato la chiave del mio database. Qualcuno ha avuto accesso ai miei dati?
Non da parte nostra. Segnaliamo che la chiave è visibile nel tuo codice pubblico; non la usiamo mai. Se sia un rischio reale dipende dalle impostazioni di row-level security, che l’audit completo verifica.
Perché il mio punteggio è più basso del previsto?
Ogni problema toglie punti, e quelli gravi ne tolgono molti: una sola chiave segreta esposta costa 40 punti. Anche i problemi non mostrati nel referto di superficie contano; il referto ti dice quanti sono.
Posso impedire allo scanner di controllare il mio sito?
Sì. Aggiungi User-agent: Root92-MigrationScanner e Disallow: / al tuo robots.txt, oppure vedi la pagina «Che cos’è lo scanner».
Cosa conservate dopo il check?
Solo i risultati, mai il contenuto delle tue pagine. Se non ci lasci la tua email, non conserviamo nessun contatto. Abbiamo adottato misure tecniche e organizzative adeguate per tenere al sicuro i tuoi dati. Dettagli e tempi di conservazione sono nell’informativa privacy.