Seatext library / BotRefund evidence
Detecting Spoofed Device Information in Automated Traffic
Spot mismatches between reported device attributes and actual browser capabilities to flag automated traffic that spoofs device info. Use WebGL texture checks, hardware fingerprinting, and behavior signals to build reliable alerts.
✓ Built for advertisers who need clear, refund-ready traffic evidence.
Automated bots often lie about screen size, GPU model, or OS to look like real users. The quickest way to catch them is to compare what the browser says it can do with what it actually does. A mismatch—like a normal‑looking user‑agent string paired with an impossible WebGL texture report—signals spoofing.
What is device‑fingerprint spoofing?
Device fingerprinting gathers a set of attributes that together form a unique profile for each visitor. Typical attributes include screen resolution, color depth, hardware concurrency, GPU renderer, installed fonts, audio stack, and TLS fingerprint. Spoofing occurs when a script deliberately feeds false values for one or more of these attributes to hide the fact that the browser is running in a headless or emulated environment.
Why does this matter? A forged fingerprint can let malicious bots bypass rate limits, scrape content, or generate fraudulent conversions without being flagged by traditional IP‑based defenses. By understanding the anatomy of a fingerprint, you can spot inconsistencies that indicate a synthetic profile.
Common spoofing techniques include overriding navigator properties, injecting custom WebGL shaders, or using proxy‑based libraries that rewrite the user‑agent string while leaving hardware signals untouched. Each technique leaves a trace—often a subtle mismatch between two otherwise independent signals. Detecting those mismatches is the core of a robust anti‑bot strategy.
For example, a bot may claim a Windows 10 user‑agent but report a GPU model that only exists on macOS devices. Or it may report a high‑DPI screen resolution while the reported device pixel ratio stays at 1.0, which is impossible on modern high‑resolution displays. These contradictions are the first clues that a fingerprint is being spoofed.
In practice, you should treat every attribute as a piece of evidence, not a verdict. Combine multiple pieces to build a confidence score that reflects the overall likelihood of spoofing.
Key signals of spoofed device info
| Signal | What it verifies | Typical spoof indicator |
|---|---|---|
| WebGL Texture Constraint | Checks if GPU‑reported textures match the hardware profile | Texture IDs that a real GPU would never generate |
| Hardware & GPU fingerprint | Collects GPU model, driver version, and supported extensions | Values that conflict with the reported OS or screen size |
| Canvas fingerprint | Renders a hidden canvas and hashes the pixel data | Hash values that differ from known device families |
| AudioContext fingerprint | Analyzes audio processing quirks and oscillator output | Frequency responses that do not match typical consumer hardware |
| Font enumeration | Lists available system fonts via CSS or Flash fallback | Missing default fonts for the claimed OS |
| TLS/JA3 fingerprint | Examines the TLS handshake cipher suite order | JA3 hashes that belong to headless libraries |
Each of these signals is independent, making it harder for a bot to spoof them all simultaneously. When two or more signals contradict each other, the probability of a spoofed session rises sharply. BotRefund’s WebGL Texture Constraint, for instance, is one of 106 independent checks that together achieve 99 % accuracy (Source: S1).
In addition to the technical signals, you should monitor behavioral cues such as mouse tremor, click timing, and navigation patterns. These cues are covered later in the step‑by‑step process.
Step‑by‑step detection process
- Collect raw browser data. Use JavaScript APIs (
navigator,canvas,WebGL,AudioContext) to capture screen resolution, GPU renderer, font list, audio stack details, and TLS handshake data. Store the raw values in a session object for later correlation. - Run the WebGL Texture Constraint check. Retrieve the texture hash via
gl.getParameter(gl.TEXTURE_BINDING_2D)and compare it against a whitelist of hashes for the reported GPU model. A mismatch suggests a virtual machine or a spoofed profile. (Source: S1) - Cross‑validate hardware signals. Verify that the GPU model, driver version, and supported extensions align with the OS version and screen DPI. For example, a Windows 10 user‑agent should not report a
Metalrenderer, which only exists on macOS. - Validate canvas and audio fingerprints. Render a hidden canvas with a known pattern, hash the pixel data, and compare it to a database of known device hashes. Do the same with an
AudioContextoscillator and compare the frequency response. Inconsistent hashes are strong spoof indicators. - Overlay behavioral cues. Track mouse movement speed, path curvature, scroll depth, and input latency. Super‑human input speed (< 1 ms) or perfectly linear mouse paths are typical of automation tools (Source: S2).
- Score the session. Assign a weight to each independent check (e.g., 0.2 for WebGL, 0.15 for canvas, 0.1 for audio, 0.25 for hardware cross‑check, 0.2 for behavior, 0.1 for TLS). Sum the weighted results to produce a spoof‑score between 0 and 1.
- Trigger an alert or mitigation. If the spoof‑score exceeds a configurable threshold (default 0.7), flag the session for review, block the request, or serve a challenge (CAPTCHA, honeypot). Log the full fingerprint and score for forensic analysis.
Example case study: An e‑commerce site observed a sudden 12 % rise in checkout conversions but a 30 % increase in refund requests. After implementing the above detection pipeline, the team identified that 68 % of the new conversions originated from sessions with a high WebGL Texture Constraint mismatch and sub‑millisecond form submissions. By blocking those sessions, the site reduced fraudulent conversions by 45 % and recovered $22,000 in disputed ad spend within two weeks.
Common pitfalls to avoid
- Relying on a single signal. Privacy tools or unusual devices can produce legitimate anomalies.
- Hard‑coding thresholds. Adjust scores based on your traffic baseline to reduce false positives.
- Ignoring server‑side data. Combine client‑side fingerprints with IP reputation and request patterns for a fuller picture.
- Over‑reacting to rare hardware. Some niche devices legitimately report uncommon GPU models; treat them as low‑confidence anomalies.
Limitations & trade‑offs
Even a well‑tuned fingerprinting system can generate false positives. Privacy‑focused browsers (e.g., Brave, Tor) deliberately randomize or suppress certain attributes, causing mismatches that look like spoofing. Corporate proxies may rewrite TLS handshakes, leading to unexpected JA3 hashes. Unusual hardware—such as a high‑resolution industrial monitor—can report screen dimensions that fall outside typical consumer ranges.
To mitigate these issues, consider the following tuning strategies:
- Weight adjustment. Reduce the weight of signals that are frequently altered by privacy tools (e.g., TLS/JA3) and increase the weight of more stable signals (e.g., hardware cross‑check).
- Dynamic baselines. Continuously update your whitelist of valid hashes and hardware combos based on real user data collected over time.
- Grace thresholds. Allow a small margin of error (e.g., 0.1 score) before triggering a hard block; instead, serve a low‑friction challenge first.
- Human review loop. Route high‑score sessions to a manual review queue where analysts can verify whether the anomaly is benign.
Understanding these trade‑offs helps you balance security with user experience, ensuring that legitimate visitors are not inadvertently blocked.
Verifying your detection setup
After implementing the checks, run a controlled test suite:
- Open your site in a standard Chrome browser on a desktop. Record the fingerprint and ensure the spoof‑score stays below 0.3.
- Run the same page in a headless environment (Puppeteer, Playwright) with default settings. Verify that the WebGL Texture Constraint, canvas hash, and behavior metrics push the score above 0.8.
- Repeat the headless test while enabling common spoofing extensions (e.g.,
navigator.webdriveroverrides). Confirm that the score rises further, demonstrating that each additional spoof adds evidence. - Log all raw data to a dashboard and compare against historical baselines. Look for outliers and adjust weights if necessary.
Document the test results and keep them as part of your security audit. Regularly repeat the tests after browser updates or when new spoofing libraries appear on the market.
Next actions and alerts
Set up a real‑time monitoring dashboard that displays:
- Current spoof‑score distribution across all active sessions.
- Top offending signals (e.g., WebGL mismatches, super‑human input).
- Geographic breakdown to spot proxy clusters.
- Alert thresholds and recent alert history.
Integrate the alert feed with your security platform (SIEM, WAF, CDN). When a spike occurs, automatically trigger a mitigation workflow: block the IP range, present a CAPTCHA, or route the session to a sandbox for deeper analysis.
Continuous monitoring keeps you ahead of evolving bot tactics. Update your signal weightings quarterly, and revisit the case study metrics to measure ongoing impact.
Detection signals deep dive
| Signal | What it verifies | Typical spoof indicator | Implementation notes |
|---|---|---|---|
| WebGL Texture Constraint | Ensures GPU‑reported texture IDs match the physical GPU model | Texture hash outside known range for reported GPU | Use gl.getParameter(gl.TEXTURE_BINDING_2D) and compare to whitelist; low latency call suitable for edge deployment. |
| Canvas fingerprint | Hashes pixel output of a hidden canvas drawing | Hash differs from known device families | Render a 2D shape, call toDataURL(), hash with SHA‑256; store per‑device signatures. |
| AudioContext | Analyzes oscillator frequency response and noise floor | Frequency spectrum outside consumer hardware range | Create an OscillatorNode, capture output via AnalyserNode, compute FFT. |
| Font enumeration | Detects which system fonts are available | Missing core fonts for claimed OS | Inject invisible @font-face rules and measure width/height changes. |
| TLS/JA3 | Examines TLS handshake cipher suite order | JA3 hash matches known headless libraries | Collect JA3 on server side; compare to whitelist of browser hashes. |
| Behavioral biometrics | Measures mouse tremor, click intervals, scroll patterns | Perfectly linear mouse paths, sub‑millisecond clicks | Record mousemove, click, scroll events; compute entropy. |
Implementing these signals together creates a layered defense. Each signal adds a piece of evidence; the combined score reflects the overall confidence that a session is spoofed.
FAQ
- How often should I recalibrate the signal weights?
- Review weights quarterly or after a major browser update. Use your monitoring dashboard to spot signals that generate many false positives and adjust their contribution accordingly.
- Does collecting these fingerprints violate user privacy regulations?
- Fingerprinting is considered a legitimate security measure in most jurisdictions, but you must disclose it in your privacy policy and provide an opt‑out where required (e.g., GDPR’s legitimate interest clause).
- Can I integrate this detection with my existing WAF or CDN?
- Yes. Export the spoof‑score via a custom header or webhook, then configure your WAF (e.g., Cloudflare, Akamai) to block or challenge requests that exceed the threshold.
- What maintenance is required after deployment?
- Maintain a whitelist of valid hardware hashes, update the JA3 database regularly, and monitor the alert dashboard for emerging patterns. Automated scripts can pull new signatures from public repositories weekly.
- How do I handle legitimate users behind corporate proxies that alter TLS fingerprints?
- Apply a lower weight to the TLS/JA3 signal for IP ranges known to belong to corporate networks, or add a secondary verification step (e.g., a low‑friction CAPTCHA) before blocking.
- Is there a way to test the system without affecting real traffic?
- Deploy the detection script in a staging environment and replay recorded traffic logs. Compare spoof‑scores against a labeled dataset of known bots and genuine users.
Further reading and comparison sources
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Further reading and comparison sources
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Learn more
Visit the website for more information.