Vai al contenuto
HexaTransfer
Torna al blog
Crittografia e sicurezza

Best practice link sicuri: proteggi i tuoi URL di download

Best practice per condividere link di download sicuri. Sicurezza token URL, scadenza link e limiti di download.

Un link di download sicuro tratta l'URL stesso come parte della chiave. Lo slug dopo lo slash deve avere almeno 128 bit di entropia (pensa a hexatransfer.com/d/7Kj9xQmN2vP8rBwLsE4fT), scadere in ore anziché in giorni, limitare i download a uno o due tentativi, e — cosa fondamentale — non essere mai l'unico segreto. Abbinalo a una chiave AES-256-GCM derivata da password che vive nel frammento URL (dopo il #) così non finisce mai nei log del server, e hai neutralizzato i vettori di fuga dei link più comuni: dalle anteprime Slack agli archivi dei proxy aziendali.

L'entropia: la matematica dell'indovinabilità

Uno slug di 6 caratteri composto da lettere e cifre ha 36^6 = 2,1 miliardi di combinazioni. Sembra enorme finché non ci si rende conto che una botnet può testare 100.000 URL al secondo contro una CDN — il che significa che un attaccante non autenticato enumera l'intero spazio in circa sei ore. Sali a 128 bit (22 caratteri in base64url) e il tempo di guess supera il calore della morte termica dell'universo. Usa crypto.getRandomValues(), mai Math.random(), e non codificare mai un ID di database. I token sequenziali rivelano il volume dei trasferimenti a chiunque raccolga due campioni a distanza di una settimana.

La chiave nel frammento, non nel percorso

Tutto ciò che segue il # in un URL è l'identificatore del frammento — i browser non lo inviano al server. Conservare la chiave di decifratura lì è il pattern che Firefox Send ha reso celebre: /#k=abc123xyz. Il server vede solo lo slug di download opaco, quindi i suoi log di accesso, le esportazioni SIEM e i dump delle violazioni non contengono materiale crittografico. Le CDN edge non possono decifrare il payload. L'anteprima di Slack elimina il frammento quando sonda l'URL, quindi il bot di anteprima non vede mai la chiave. Questo singolo accorgimento blocca l'80% degli attacchi pratici di intercettazione dei link.

Finestre di scadenza calibrate alla minaccia

La scadenza predefinita di 7 giorni è troppo generosa per la maggior parte dei casi d'uso. Calibra al flusso di lavoro: 15 minuti per un .pdf di bonifico a una banca, 4 ore per una revisione di contratto, 24 ore per un album fotografico, 7 giorni solo per la collaborazione internazionale asincrona. Esprimi la scadenza come timestamp UTC assoluto nel payload dell'URL firmato e applicala lato server — non fidarti mai dell'orologio del client. Alla scadenza, sovrascrivi il ciphertext su disco con zeri (idealmente via blkdiscard su NVMe) così un'eventuale analisi forense successiva non trova nulla.

Contatori di download che funzionano davvero

Un link a download singolo sembra a prova di bomba finché non ci si rende conto che i browser ripetono aggressivamente i trasferimenti parziali. Se Chrome si interrompe all'80% e riprende con una nuova richiesta Range, conta come due download? Implementa il contatore al confine di completamento del file, non per richiesta HTTP. Incrementa solo quando l'ultimo byte è stato inviato e il tag di autenticazione è verificato. In alternativa, traccia gli ID di sessione univoci su una finestra di 10 minuti: una sessione = un download, indipendentemente da quante richieste Range vengono emesse. WeTransfer confonde queste due cose ed è stato criticato per aver falsamente marcato i link come consumati.

URL firmati con token a breve durata

Per i flussi enterprise, avvolgi l'URL di download con una firma HMAC-SHA256 su (slug, scadenza, max_downloads, issuer_id). Il server valida la firma prima di servire qualsiasi byte. Gli URL pre-firmati S3 fanno questo nativamente; R2 e Backblaze B2 seguono lo stesso pattern. Un URL firmato che trapela su Slack è ancora pericoloso, ma la breve scadenza (diciamo, 5 minuti) limita il danno. Abbina questo al binding dell'IP — la firma include il prefisso /24 atteso — per scoraggiare il forwarding dei link tra aree geografiche.

Prevenire fughe da referrer e anteprime

I browser inviano l'URL completo (senza frammento) nell'intestazione Referer a meno che tu non imposti Referrer-Policy: no-referrer nella pagina di download. Senza questa intestazione, cliccare un link esterno dalla pagina di download rivela lo slug a ogni tracker nella destinazione. Imposta anche X-Robots-Tag: noindex, nofollow e un robots.txt che blocchi /d/, così Googlebot non archivia un link incollato accidentalmente su un forum. Per le anteprime di Slack e Teams, restituisci un 204 No Content agli User-Agent che corrispondono ai loro bot di unfurl.

Controlli di forwarding e binding del destinatario

Una volta che Alice invia a Bob un link, Bob può inviarlo a chiunque. Per impedirlo, lega il link all'identità di Bob. Opzioni in ordine crescente di sicurezza: verifica email (token one-time a bob@azienda.com), verifica SMS (OTP al numero +39), registrazione passkey alla prima visita, o login OIDC tramite Google Workspace di Bob. Ogni passo scambia attrito per contenimento. Per una risposta GDPR ai sensi dell'Articolo 15, la verifica email è di solito sufficiente. Per un referto di laboratorio protetto da normative settoriali, spetta la passkey o OIDC.

Revoca su richiesta

Anche con tutte le protezioni in atto, qualcosa andrà storto — un laptop rubato, un collaboratore esterno licenziato, un destinatario sbagliato. Un pulsante di revoca che uccide il link immediatamente è essenziale. Implementazione: mantieni una lista di revoca codificata sull'hash dello slug, verificata ad ogni download. Propaga agli edge CDN entro 60 secondi via purge API (l'endpoint /zones/:id/purge_cache di Cloudflare accetta una lista di URL). HexaTransfer espone la revoca dalla dashboard del mittente; Dropbox Transfer e Smash la supportano entrambi ma la mettono dietro un costo aggiuntivo. Testa la revoca ogni trimestre — i pulsanti morti durante gli incidenti sono peggio di nessun pulsante.

Telemetria senza sorveglianza

Registra quanto basta per rilevare abusi (hash IP, famiglia User-Agent, timestamp, byte serviti) ma non abbastanza da ricostruire l'identità del destinatario. Hasha gli IP con una chiave ruotata giornalmente così le finestre di correlazione restano brevi. Non registrare mai il frammento URL. Una finestra di conservazione di 30 giorni soddisfa SOC 2 Common Criteria 7.2 senza creare un archivio di sorveglianza. Esponi i contatori di abuso al mittente nella dashboard così vede "3 tentativi di password falliti da AS15169" e sa di dover revocare.

Provalo su hexatransfer.com — gratis, senza registrazione, fino a 10 GB.

Invia file di grandi dimensioni in modo sicuro con crittografia end-to-end

Trasferisci file fino a 10 GB gratuitamente con crittografia end-to-end. Nessun account necessario. I tuoi file vengono crittografati nel browser prima del caricamento — nessun altro può leggerli.

Invia un file