Fingerprint JS V2 to V5 migration concern
We are migrating from FingerprintJS V2 to V5. With V2, we were able to attach the browser fingerprint (BFP) to every request. With V5’s async nature, we are facing issues where requests are sent before the fingerprint is ready, and in some cases we also need to re-generate BFP since we don’t rely on consistent client-side storage. This is mainly due to fingerprint generation latency + async execution, where:
Request lifecycle progresses faster than fingerprint resolution No reliable synchronous fallback exists Re-generation causes timing gaps again
Requirement: BFP must be sent with every request to validate request authenticity and detect malicious traffic. Concern: If BFP is missing and read from stored locations (cookie/window/etc), an attacker can send an empty/tampered request, and the system may fallback to stored value — creating a security gap. What we explored:
Early initialization → still misses early requests Async request gating → not feasible as we are in older version, await not supported In-memory storage → not reliable across flows Client-side storage (cookie/localStorage) → security risk Reducing entropy → no meaningful latency improvement
Ask:
How to ensure BFP is available and attached to every request, including early + regenerated flows? What is the secure pattern to handle async generation without relying on stored values?
Source: fingerprintjs/fingerprintjs