fix: randomize hardware fingerprint values across browser sessions
All checks were successful
CI / build (pull_request) Successful in 30s
CI / vet (pull_request) Successful in 2m17s
CI / test (pull_request) Successful in 2m21s

Replace static stealthChromiumScripts and stealthFirefoxScripts slices
with builder functions that accept hardware profile structs. Each browser
session now randomly selects from a pool of 6 realistic profiles per
engine, and Chromium connection stats receive per-session jitter (±20ms
RTT, ±2 Mbps downlink). This prevents anti-bot systems from correlating
sessions via identical WebGL, connection, mozInnerScreen, and
hardwareConcurrency fingerprints.

Closes #71

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-24 01:38:14 +00:00
parent 8eb69c1dee
commit 4772b153b8
3 changed files with 233 additions and 70 deletions

View File

@@ -74,9 +74,9 @@ func initBrowser(opt BrowserOptions) (*browserInitResult, error) {
initScripts = append(initScripts, stealthCommonScripts...)
switch opt.Browser {
case BrowserChromium:
initScripts = append(initScripts, stealthChromiumScripts...)
initScripts = append(initScripts, buildChromiumStealthScripts(randomChromiumProfile())...)
case BrowserFirefox:
initScripts = append(initScripts, stealthFirefoxScripts...)
initScripts = append(initScripts, buildFirefoxStealthScripts(randomFirefoxProfile())...)
}
}