Bibliothèque avancée de fingerprinting pour générer des identifiants uniques de navigateur
Utilise le canvas, l'audio et l'entropie matérielle • Zéro dépendance • 100% client-side
- 🎨 Multiples sources d'entropie : Canvas, AudioContext, WebGL, Spécifications matérielles, User Agent
- 🔄 API Fluent : Méthodes chaînables pour un code propre et lisible
- ⚡ Support Sync/Async : Génération synchrone et asynchrone selon vos besoins
- 🎯 Trois portées :
device|browser|sessionpour différents cas d'usage - 🔧 Personnalisable : Contrôle de la longueur, casse (min/maj/mixte), et sources d'entropie
- 🪶 Léger : ~8KB minifié, zéro dépendance externe
- 🔒 Privacy-First : Aucune donnée envoyée aux serveurs, 100% client-side
- 📱 Cross-Navigateur : Chrome, Firefox, Safari, Edge, Opera
Incluez le script dans votre HTML :
<!-- Version minifiée (recommandée) -->
<script src="https://lombard-web-services.github.io/Advanced-Fingerprinting-Library/fp.min.js"></script>
<!-- Version complète -->
<script src="https://lombard-web-services.github.io/Advanced-Fingerprinting-Library/fp.js"></script>// Générer une empreinte appareil standard
const fp = new Fingerprint().generate();
console.log(fp); // "a7f3k9m2p5q8r4t6u1v0w3x7y9z2b4c5"// Pour le fingerprinting audio (nécessite async)
const fp = await new Fingerprint()
.audio(true)
.generateAsync();Configurez votre empreinte avec des méthodes chaînables :
const fp = new Fingerprint()
.length(32) // 8-64 caractères
.casing('uppercase') // 'lowercase' | 'uppercase' | 'mixed'
.scope('device') // 'device' | 'browser' | 'session'
.canvas(true) // Inclure l'entropie canvas
.audio(true) // Inclure l'entropie audio
.webgl(false) // Exclure WebGL
.generate();Utilisez les configurations prédéfinies :
// Matériel + Canvas + Audio (plus stable)
const deviceFp = Fingerprint.device()
.length(16)
.casing('mixed')
.generate();
// + User Agent, plugins, WebGL
const browserFp = await Fingerprint.browser()
.length(64)
.generateAsync();
// Minimal : langue, timezone, écran uniquement
const sessionFp = Fingerprint.session()
.generate();One-liner pour les cas simples :
const fp = await Fingerprint.generateAsync({
length: 32,
casing: 'uppercase',
scope: 'device',
includeCanvas: true,
includeAudio: true
});Inspectez les composants collectés :
const fp = new Fingerprint()
.scope('device')
.collect();
console.log(fp.raw());
// ['ua:Mozilla/5.0...', 'canvas:data:image/png...', 'audio:sig:12345', ...]
console.log(fp.generate()); // Hash finalDétectez les changements d'empreinte (utile pour la détection de fraude) :
const fp1 = new Fingerprint().generate();
const fp2 = new Fingerprint().generate();
const similarity = Fingerprint.compare(fp1, fp2);
// Retourne 0.0 à 1.0 (1.0 = identique)
if (similarity < 0.9) {
console.warn('Configuration appareil modifiée !');
}| Option | Type | Défaut | Description |
|---|---|---|---|
length |
Number | 32 | Longueur de l'empreinte (8-64) |
casing |
String | 'lowercase' | 'lowercase' | 'uppercase' | 'mixed' |
scope |
String | 'device' | 'device' | 'browser' | 'session' |
includeCanvas |
Boolean | true | Entropie de rendu Canvas |
includeAudio |
Boolean | true | Entropie AudioContext |
includeWebGL |
Boolean | false | Infos renderer WebGL |
| Portée | Sources d'entropie | Cas d'usage |
|---|---|---|
| device | Matériel, Canvas, Audio, Écran | Tracking cross-navigateur par appareil |
| browser | Device + User Agent, Plugins, WebGL | Tracking spécifique au navigateur |
| session | Langue, Timezone, Bases écran | Identification temporaire/session |
new Fingerprint(config?)| Méthode | Paramètres | Retour | Description |
|---|---|---|---|
.length(n) |
Number | this | Définit la longueur |
.casing(style) |
String | this | Définit la casse |
.scope(type) |
String | this | Définit la portée |
.canvas(bool) |
Boolean | this | Active/désactive canvas |
.audio(bool) |
Boolean | this | Active/désactive audio |
.webgl(bool) |
Boolean | this | Active/désactive WebGL |
.collect() |
- | this | Collecte les données |
.generate() |
- | String | Génère le hash |
.generateAsync() |
- | Promise | Génération async |
.raw() |
- | Array | Données brutes |
.get() |
- | String|null | Dernier résultat |
| Méthode | Paramètres | Retour | Description |
|---|---|---|---|
Fingerprint.generate(config?) |
Object | String | Génération sync rapide |
Fingerprint.generateAsync(config?) |
Object | Promise | Génération async rapide |
Fingerprint.device() |
- | Fingerprint | Instance portée device |
Fingerprint.browser() |
- | Fingerprint | Instance portée browser |
Fingerprint.session() |
- | Fingerprint | Instance portée session |
Fingerprint.compare(fp1, fp2) |
String, String | Number | Compare la similarité |
git clone https://github.com/Lombard-Web-Services/Advanced-Fingerprinting-Library.git
cd Advanced-Fingerprinting-Library
# Servez avec n'importe quel serveur statique
python -m http.server 8000
# ou
npx serve .Puis ouvrez http://localhost:8000
Ou accédez directement à la démo en ligne
| Navigateur | Version | Notes |
|---|---|---|
| Chrome | 60+ | Support complet |
| Firefox | 55+ | Support complet |
| Safari | 12+ | Support complet |
| Edge | 79+ | Support complet |
| Opera | 47+ | Support complet |
⚠️ Le fingerprinting audio nécessite le support de Web Audio API.
Advanced-Fingerprinting-Library/
├── index.html # Page de démo interactive
├── fp.js # Librairie source (~15KB)
├── fp.min.js # Librairie minifiée (~8KB)
└── README.md # Documentation
Cette bibliothèque est conçue pour des fins de sécurité légitimes telles que :
- Détection de fraude
- Protection contre les bots
- Gestion de session
- Analytics (anonymisés)
- Tracking cross-site sans consentement
- Violation des lois sur la vie privée (RGPD, CCPA)
- Fingerprinting d'utilisateurs ayant refusé
Important : Informez toujours les utilisateurs si du fingerprinting est effectué et fournissez des mécanismes d'opt-out lorsque requis par la loi.
MIT License - voir le fichier LICENSE pour les détails.
Copyright © 2026 Lombard Web Services
Thibaut LOMBARD
- Twitter: @lombardweb
- GitHub: Lombard-Web-Services
⭐ Si ce projet vous est utile, n'hésitez pas à lui donner une étoile !