import{Fingerprint}from"fingerprinter-js";// With custom optionsconstfingerprint=newFingerprint({excludeCanvas: true,excludeWebGL: true,customData: {userId: "12345",sessionId: "abc-def-ghi",// ⚠️ Will be automatically filtered for stabilityversion: "1.0",// ✅ Stable, will be kept},});// To include unstable data (not recommended)constunstableFingerprint=newFingerprint({allowUnstableData: true,customData: {timestamp: Date.now(),// ⚠️ Will make fingerprint unstablesessionId: "random-id",},});constresult=awaitfingerprint.generate();
⚠️ Automatic Stability: By default, FingerprintJS automatically filters unstable data from customData (timestamps, UUIDs, random values) to ensure fingerprint stability. Use allowUnstableData: true if you need to include this data.
The confidence level indicates fingerprint reliability:
90-100%: Very reliable, many components available
70-89%: Reliable, some components missing
50-69%: Moderately reliable, several components unavailable
< 50%: Low reliability, few components available
FingerprintJS includes advanced bot and fraud detection:
0-30: Legitimate user ✅
30-70: Requires vigilance ⚠️
70-100: Likely malicious 🚨
Automation Tools: Selenium, PhantomJS, Puppeteer
Headless Browsers: Chrome headless, etc.
Inconsistencies: Timezone/language mismatches
Bot Signatures: Known crawler patterns
Environmental Anomalies: Missing APIs, suspicious user agents
constresult=awaitFingerprint.generate({includeSuspectAnalysis: true,});if(result.suspectAnalysis.score>70){// Block or challenge suspicious usersconsole.log("Suspicious activity detected");console.log("Signals:",result.suspectAnalysis.signals);}elseif(result.suspectAnalysis.score>30){// Require additional authenticationconsole.log("Moderate risk detected");}else{// Allow normal accessconsole.log("Legitimate user");}
🛡️ Security Considerations
This library is designed for:
Two-factor authentication
Fraud detection
Anonymous analytics
Experience personalization
Important: Respect user privacy and local regulations (GDPR, etc.).
FingerprintJS automatically ensures fingerprint stability by filtering unstable data:
Static browser properties
Stable custom data (version, configuration, etc.)
Hardware characteristics
❌ Unstable Data (automatically filtered)
timestamp, time, now, date
random, rand, nonce, salt
sessionId, requestId, uuid
UUIDs and temporary identifiers
Numbers that look like timestamps
Automatic Filtering Example
constfp=newFingerprint({customData: {// ✅ Kept (stable)version: "1.0",theme: "dark",// ❌ Automatically filtered (unstable)timestamp: Date.now(),sessionId: "123e4567-e89b-12d3-a456-426614174000",random: Math.random(),},});// Result: only version and theme will be included
If you absolutely need to include unstable data:
constfp=newFingerprint({allowUnstableData: true,// ⚠️ Disables filteringcustomData: {timestamp: Date.now(),// Will make fingerprint unstable},});
🔧 Custom Collectors Usage
import{Fingerprint,CanvasCollector,WebGLCollector}from"fingerprinter-js";// Use only specific collectorsconstcanvas=newCanvasCollector();constcanvasData=awaitcanvas.collect();constwebgl=newWebGLCollector();constwebglData=awaitwebgl.collect();
constresult=awaitFingerprint.generate({includeSuspectAnalysis: true});constautomationSignals=result.suspectAnalysis.signals.filter((s)=>["webdriver","headless","selenium"].includes(s.type));if(automationSignals.length>0){// Challenge with CAPTCHA}
constresult=awaitFingerprint.generate({includeSuspectAnalysis: true});if(result.suspectAnalysis.score<40){// Include in analyticstrack("page_view",{fingerprint: result.fingerprint});}