Aller au contenu
HexaTransfer
Retour au blog
Chiffrement et securite

Meilleures pratiques de partage de liens sécurisés : protégez vos URL

Meilleures pratiques pour partager des liens de téléchargement sécurisés. Sécurité des tokens URL, expiration des liens et limites de téléchargement.

Un lien de téléchargement sécurisé traite l'URL elle-même comme une partie de la clé. Le slug après le slash doit contenir au moins 128 bits d'entropie (pensez à hexatransfer.com/d/7Kj9xQmN2vP8rBwLsE4fT), expirer en heures plutôt qu'en jours, limiter les téléchargements à une ou deux tentatives, et — surtout — ne jamais être le seul secret. Associez-le à une clé AES-256-GCM dérivée d'un mot de passe qui vit dans le fragment URL (après le #) pour ne jamais apparaître dans les journaux serveur, et vous avez contrecarré les vecteurs de fuite de lien les plus courants, des aperçus Slack aux archives de proxy d'entreprise.

Entropie : les mathématiques de la devinabilité

Un slug de 6 caractères composé de lettres et de chiffres a 36^6 = 2,1 milliards de combinaisons. Ça semble énorme jusqu'à ce que vous réalisiez qu'un botnet peut tester 100 000 URL par seconde contre un CDN — ce qui signifie qu'un attaquant non authentifié énumère l'espace complet en environ six heures. Passez à 128 bits (22 caractères de base64url) et le temps d'énumération dépasse la mort thermique de l'univers. Utilisez crypto.getRandomValues(), jamais Math.random(), et n'encodez jamais un identifiant de base de données. Les tokens séquentiels révèlent le volume de transferts à quiconque collecte deux échantillons à une semaine d'intervalle.

Placez la clé dans le fragment, pas dans le chemin

Tout ce qui suit # dans une URL est l'identifiant de fragment — les navigateurs ne l'envoient pas au serveur. Stocker la clé de déchiffrement là est le schéma que Firefox Send a pionniéré : /#k=abc123xyz. Le serveur ne voit que le slug opaque de téléchargement, donc ses journaux d'accès, ses exports SIEM et ses dumps de violation ne contiennent aucun matériel de clé. Les caches de périphérie CDN ne peuvent pas déchiffrer la charge utile non plus. Les aperçus Slack suppriment le fragment quand ils sondent l'URL, donc le bot d'aperçu ne voit jamais la clé. Cette seule astuce bloque 80 % des attaques pratiques d'interception de lien.

Fenêtres d'expiration adaptées à la menace

L'expiration par défaut à 7 jours est trop généreuse pour la plupart des cas d'usage. Calibrez selon le flux de travail : 15 minutes pour un .pdf de virement bancaire à une banque, 4 heures pour une revue de contrat, 24 heures pour un album photo, 7 jours uniquement pour une collaboration internationale asynchrone. Exprimez l'expiration comme un horodatage UTC absolu dans la charge utile de l'URL signée et appliquez-la côté serveur — ne faites jamais confiance à une horloge côté client. À l'expiration, écrasez le texte chiffré sur le disque avec des zéros (idéalement via blkdiscard sur NVMe) pour qu'une analyse forensique ultérieure ne trouve rien.

Compteurs de téléchargement qui fonctionnent vraiment

Un lien à téléchargement unique semble hermétique jusqu'à ce que vous réalisiez que les navigateurs réessaient agressivement les transferts partiels. Si Chrome échoue à 80 % et reprend avec une nouvelle requête Range, est-ce que ça compte pour deux téléchargements ? Implémentez le compteur à la limite de complétion du fichier, pas par requête HTTP. Incrémentez seulement quand le dernier octet est envoyé et que le tag d'authentification est vérifié. Alternativement, suivez les identifiants de session uniques sur une fenêtre de 10 minutes : une session = un téléchargement, quel que soit le nombre de requêtes Range émises. WeTransfer confond ces deux notions et a été critiqué pour avoir faussement marqué des liens comme consommés.

URLs signées avec des tokens de courte durée

Pour les flux d'entreprise, enveloppez l'URL de téléchargement avec une signature HMAC-SHA256 sur (slug, expiry, max_downloads, issuer_id). Le serveur valide la signature avant de servir un seul octet. Les URLs pré-signées S3 font cela nativement ; R2 et Backblaze B2 suivent le même schéma. Une URL signée qui fuit vers Slack reste dangereuse, mais la courte expiration (disons 5 minutes) limite les dommages. Associez cela à une liaison IP — la signature inclut le préfixe /24 attendu — pour contrecarrer le transfert de lien entre zones géographiques.

Prévenir les fuites de référent et d'aperçu

Les navigateurs envoient l'URL complète (sans le fragment) dans l'en-tête Referer à moins que vous ne définissiez Referrer-Policy: no-referrer sur la page de téléchargement. Sans cet en-tête, cliquer sur un lien externe depuis la page de téléchargement révèle le slug à chaque traqueur sur la destination. Définissez aussi X-Robots-Tag: noindex, nofollow et un robots.txt qui bloque /d/, pour que Googlebot n'archive pas un lien accidentellement collé sur un forum. Pour les aperçus Slack et Teams, retournez un 204 No Content aux User-Agents correspondant à leurs bots d'aperçu.

Contrôles de transfert et liaison au destinataire

Une fois qu'Alice envoie un lien à Bob, Bob peut le transférer à n'importe qui. Pour éviter cela, liez le lien à l'identité de Bob. Options par ordre de robustesse croissante : vérification email (token à usage unique vers bob@entreprise.fr), vérification SMS (OTP vers son numéro), enregistrement de passkey à la première visite, ou connexion OIDC via Google Workspace de Bob. Chaque étape échange de la friction contre du confinement. Pour une réponse à une demande d'accès RGPD Article 15, la vérification email est généralement suffisante. Pour un résultat de laboratoire réglementé par HIPAA, la passkey ou OIDC est de mise.

Révocation à la demande

Même avec toutes ces protections en place, quelque chose va mal tourner — un ordinateur portable volé, un prestataire dont le contrat prend fin, un mauvais destinataire. Un bouton de révocation qui tue le lien instantanément compte. Implémentation : maintenez une liste de révocation indexée sur le hash du slug, vérifiée à chaque téléchargement. Propagez aux périphéries CDN en moins de 60 secondes via l'API de purge (le endpoint /zones/:id/purge_cache de Cloudflare prend une liste d'URL). HexaTransfer expose la révocation via le tableau de bord de l'expéditeur ; Dropbox Transfer et Smash la supportent tous deux mais facturent en supplément. Testez la révocation chaque trimestre — les boutons morts pendant les incidents sont pires qu'aucun bouton.

Télémétrie sans surveillance

Journalisez suffisamment pour détecter les abus (hash IP, famille User-Agent, horodatage, octets servis) mais pas assez pour reconstituer l'identité du destinataire. Hachez les IP avec une clé qui tourne quotidiennement pour que les fenêtres de corrélation restent courtes. Ne journalisez jamais le fragment URL, évidemment. Une fenêtre de rétention de 30 jours satisfait SOC 2 Common Criteria 7.2 sans créer une archive de surveillance. Exposez les compteurs d'abus à l'expéditeur dans le tableau de bord pour qu'il voie « 3 tentatives de mot de passe échouées depuis AS15169 » et sache révoquer.

Essayez sur hexatransfer.com — gratuit, sans compte, jusqu'à 10 Go.

Envoyez vos fichiers volumineux en toute sécurité avec le chiffrement de bout en bout

Transférez des fichiers jusqu'à 10 Go gratuitement avec le chiffrement de bout en bout. Aucun compte requis. Vos fichiers sont chiffrés dans votre navigateur avant l'envoi — personne d'autre ne peut les lire.

Envoyer un fichier