Fingerprinting quota de stockage : taille du disque
Comment StorageManager.estimate() expose la taille du disque comme signal de pistage, et comment contrôler les réponses de quota de stockage au niveau du moteur du navigateur.
Vous préférez la doc produit maintenue ?
Cet article a une page équivalente dans le centre de documentation. Utilisez les docs pour le flux canonique, les flags à jour et la référence durable.
Introduction
L'API Storage Manager a été introduite pour aider les applications web à comprendre combien d'espace de stockage est disponible pour leurs données. Via navigator.storage.estimate(), un site web peut interroger le quota de stockage approximatif (espace maximum disponible) et l'utilisation actuelle (combien a été consommé). Ces informations aident les applications à prendre des décisions sur les stratégies de mise en cache, le stockage de données hors ligne, et s'il faut demander aux utilisateurs de libérer de l'espace.
L'API a été conçue avec de bonnes intentions. Les applications web progressives, les applications orientées hors ligne et les sites riches en médias bénéficient tous de la connaissance de leur budget de stockage. Cependant, la valeur de quota retournée par navigator.storage.estimate() est dérivée des caractéristiques réelles du disque de l'appareil. Chrome, par exemple, alloue typiquement un quota basé sur un pourcentage de l'espace disque total disponible. Cela signifie que la valeur retournée révèle indirectement des informations sur le matériel de stockage physique de l'utilisateur, créant un signal de fingerprinting qui persiste entre les sessions et survit aux mesures de confidentialité courantes.
Impact sur la vie privée
Le fingerprinting par quota de stockage est préoccupant parce que la configuration du disque est une caractéristique stable et spécifique au matériel. Contrairement aux cookies ou aux données de session, l'espace disque disponible sur un appareil change lentement (uniquement lorsque des fichiers sont ajoutés, supprimés ou lorsqu'un disque est remplacé). Cela signifie que la valeur de quota de stockage est un identifiant persistant.
Les implications pour la vie privée sont significatives :
- Identification de la taille du disque : un appareil avec un SSD de 256 Go produit une valeur de quota différente d'un appareil avec un disque de 512 Go ou 1 To. Comme les tailles de disque suivent des paliers de fabrication standard (128, 256, 512, 1024 Go), la valeur de quota révèle effectivement le palier de stockage.
- Inférence des schémas d'utilisation : le ratio entre quota et utilisation révèle à quel point le disque est plein. Au fil du temps, les changements de ce ratio peuvent révéler les schémas d'activité de l'utilisateur.
- Identification du système d'exploitation : différents systèmes d'exploitation calculent les quotas de stockage différemment. Chrome sous Windows, macOS et Linux applique chacun des formules et des plafonds différents.
- Identification de la classe d'appareil : un appareil avec un disque de 2 To est probablement un ordinateur de bureau ou un ordinateur portable haut de gamme, tandis que 64 Go suggère un ordinateur portable d'entrée de gamme ou un Chromebook.
Des recherches de l'Université d'Adélaïde ont démontré que les valeurs de quota de stockage, combinées avec d'autres signaux liés au stockage, pouvaient augmenter l'unicité de l'empreinte de 5-10%. L'API ne nécessite aucune permission et ne produit aucune notification.
Contexte technique
Comment fonctionne navigator.storage.estimate()
La méthode navigator.storage.estimate() retourne une promesse qui se résout en un objet avec deux propriétés :
quota: l'espace de stockage total disponible pour l'origine, en octets. C'est typiquement un pourcentage de l'espace disque total, soumis à des plafonds et politiques spécifiques au navigateur.usage: la quantité d'espace de stockage actuellement consommée par l'origine, en octets.
Chrome calcule le quota comme environ 60% de l'espace disque total disponible, avec des limites supplémentaires par origine. Firefox utilise une formule différente basée sur l'espace libre disponible. Safari impose des limites par origine plus strictes avec un mécanisme d'augmentation basé sur l'invite.
Précision des valeurs
La valeur quota est retournée en octets, fournissant une très haute précision. Un disque de 512 Go pourrait produire un quota d'environ 307 200 000 000 octets (environ 60% de 512 Go), tandis qu'un disque de 256 Go produit environ 153 600 000 000. La valeur exacte dépend de l'espace libre réel, des autres profils et de l'overhead du système d'exploitation, mais l'ordre de grandeur distingue de manière fiable les tailles de disque.
Approches de protection courantes et leurs limites
VPN et serveurs proxy
Les VPN n'ont aucun effet sur les valeurs de quota de stockage. Le quota est déterminé entièrement par la configuration du disque local et le calcul du navigateur.
Navigation privée et mode incognito
Les modes de navigation privée changent le comportement du quota de stockage, mais pas de manière bénéfique pour la vie privée. En mode navigation privée, certains navigateurs rapportent un quota significativement réduit, et le quota peut différer du mode normal. Cette différence devient elle-même un signal pour détecter le mode navigation privée.
Extensions de navigateur
Les extensions peuvent intercepter la promesse navigator.storage.estimate() et retourner des valeurs modifiées. Cependant, les valeurs fixes sont détectables si elles ne changent pas entre les sessions, et les substitutions de promesse sont détectables par les vérifications de descripteurs de propriétés et l'inspection de la chaîne de prototypes.
L'approche de BotBrowser au niveau du moteur
BotBrowser contrôle les réponses de quota de stockage au niveau du moteur du navigateur. Lorsqu'un profil d'empreinte est chargé, toutes les requêtes liées au stockage retournent des valeurs définies par le profil plutôt que calculées depuis le disque réel de la machine hôte.
Valeurs de quota basées sur le profil
chrome --bot-profile="/path/to/profile.enc" \
--user-data-dir="$(mktemp -d)"
Le profil inclut des valeurs de quota de stockage capturées depuis de vrais appareils. Ces valeurs sont réalistes pour la classe d'appareil cible du profil : un profil représentant un ordinateur portable avec un SSD de 512 Go rapporte des valeurs de quota cohérentes avec cette configuration, indépendamment de la taille réelle du disque de la machine hôte.
Signaux de stockage cohérents en interne
BotBrowser garantit que toutes les API liées au stockage produisent des résultats cohérents :
navigator.storage.estimate()retourne les valeurs de quota et d'utilisation définies par le profil- Le comportement de stockage IndexedDB s'aligne avec le quota rapporté
- Le comportement de l'API Cache est cohérent avec le budget de stockage
- Le ratio quota/utilisation est réaliste pour la classe d'appareil cible
- Les valeurs restent stables tout au long de la session
Prévention des fuites du disque hôte
L'objectif principal est d'empêcher la configuration de disque de la machine hôte de fuiter à travers les API de stockage. Que BotBrowser s'exécute sur un serveur de 128 Go ou une station de travail de 4 To, les valeurs de quota de stockage rapportées aux pages web reflètent l'appareil cible du profil, pas le matériel hôte réel.
Configuration et utilisation
Utilisation CLI de base
La protection du quota de stockage est automatique lors du chargement d'un profil :
chrome --bot-profile="/path/to/profile.enc" \
--user-data-dir="$(mktemp -d)"
Aucun flag supplémentaire n'est nécessaire.
Intégration Playwright
const { chromium } = require('playwright-core');
(async () => {
const browser = await chromium.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
],
headless: true,
});
const context = await browser.newContext({ viewport: null });
const page = await context.newPage();
const storageInfo = await page.evaluate(async () => {
const estimate = await navigator.storage.estimate();
return {
quota: estimate.quota,
usage: estimate.usage,
quotaGB: (estimate.quota / (1024 ** 3)).toFixed(2),
usageMB: (estimate.usage / (1024 ** 2)).toFixed(2),
};
});
console.log('Storage info:', storageInfo);
await browser.close();
})();
Intégration Puppeteer
const puppeteer = require('puppeteer-core');
(async () => {
const browser = await puppeteer.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
],
headless: true,
defaultViewport: null,
});
const page = await browser.newPage();
await page.goto('about:blank');
const quota = await page.evaluate(async () => {
const est = await navigator.storage.estimate();
return { quota: est.quota, usage: est.usage };
});
console.log('Quota:', quota.quota, 'bytes');
console.log('Usage:', quota.usage, 'bytes');
await browser.close();
})();
Vérification
Après le lancement de BotBrowser avec un profil, vérifiez les valeurs de quota de stockage :
const estimate = await navigator.storage.estimate();
const quotaGB = (estimate.quota / (1024 ** 3)).toFixed(2);
const usageMB = (estimate.usage / (1024 ** 2)).toFixed(2);
console.log(`Quota: ${quotaGB} GB (${estimate.quota} bytes)`);
console.log(`Usage: ${usageMB} MB (${estimate.usage} bytes)`);
Points de vérification :
- La valeur de quota est réaliste pour la classe d'appareil cible du profil (pas la machine hôte)
- Le quota ne correspond pas à la taille réelle du disque de votre hôte
- La valeur d'utilisation est raisonnable (basse pour une session fraîche, augmentant au fur et à mesure que les données sont stockées)
- Les valeurs restent stables entre les rechargements de page au sein de la même session
- Des profils différents produisent des valeurs de quota différentes
Bonnes pratiques
-
Utilisez des profils complets. Les valeurs de quota de stockage doivent être cohérentes avec le reste de l'identité de l'appareil. Un profil prétendant être un appareil mobile ne devrait pas rapporter un quota de 2 To.
-
Faites correspondre
user-data-dirau cas d'usage. Unuser-data-dirfrais (utilisantmktemp -d) commence avec une utilisation minimale. Pour les sessions persistantes, réutilisez le même répertoire de données pour que les valeurs d'utilisation évoluent naturellement. -
Vérifiez par rapport à votre hôte réel. Exécutez
navigator.storage.estimate()sur votre machine hôte en dehors de BotBrowser pour connaître votre vraie valeur de quota, puis confirmez que le profil de BotBrowser rapporte une valeur différente.
Questions fréquentes
Le quota de stockage révèle-t-il la taille exacte du disque ?
Pas exactement. Le quota est un pourcentage de l'espace disque disponible (environ 60% sous Chrome), et il change au fur et à mesure que l'espace disque est utilisé. Cependant, la valeur de quota distingue de manière fiable les paliers de taille de disque (128 Go vs. 256 Go vs. 512 Go vs. 1 To).
Le quota de stockage change-t-il en mode navigation privée ?
Oui. Le mode navigation privée utilise typiquement un système de fichiers temporaire avec un quota différent. La valeur de quota en mode privé est souvent significativement inférieure à celle en mode normal, ce qui peut être utilisé pour détecter la navigation privée.
Le quota de stockage peut-il révéler si j'exécute dans un conteneur ?
Les conteneurs et machines virtuelles ont souvent des allocations de disque plus petites que les machines physiques. Un conteneur Docker avec un volume de 20 Go produit un quota très différent d'une machine physique avec un SSD de 1 To. L'approche basée sur les profils de BotBrowser garantit que le quota rapporté correspond à l'appareil cible, pas au stockage réel du conteneur.
Résumé
Le navigator.storage.estimate() de l'API Storage Manager expose les caractéristiques du disque qui servent de signal de fingerprinting persistant. La valeur de quota révèle indirectement la taille du disque, la classe d'appareil et le système d'exploitation via les formules de calcul spécifiques au navigateur. BotBrowser contrôle toutes les réponses de quota de stockage au niveau du moteur via son système de profils, garantissant que les valeurs rapportées correspondent à l'appareil cible et ne divulguent pas d'informations sur la configuration réelle du disque de la machine hôte. Pour une protection connexe, voir navigator properties protection, performance timing control, et comprehensive profile management.
Articles Connexes
Faites passer BotBrowser de la recherche à la production
Utilisez ces guides pour comprendre le modèle, puis passez à la validation multi-plateforme, aux contextes isolés et au déploiement navigateur prêt pour l'échelle.