Skip to content

do not rely on 0 plugins for detecting headlesschrome - #194

Open
unixfox wants to merge 1 commit into
fingerprintjs:mainfrom
unixfox:remove-plugins-0-headlesschrome
Open

do not rely on 0 plugins for detecting headlesschrome#194
unixfox wants to merge 1 commit into
fingerprintjs:mainfrom
unixfox:remove-plugins-0-headlesschrome

Conversation

@unixfox

@unixfox unixfox commented Nov 24, 2024

Copy link
Copy Markdown

Hello,

I'm running BotD in production and with one of my user I diagnosed that navigator.plugins.length returns 0 on his browser.

He is running Vivaldi 7.0.3495.18 (Stable channel) on Windows and without any extension installed the browser gives no plugins in the list:

image

I'm proposing to remove the classification that if the plugins list is empty, then it's a headless chrome.

First because now for --headless=new, the value for navigator.plugins.length is not empty anymore. It's 5. Everyone is already using that new headless method or spoofing the value for navigator.plugins

And second, the API navigator.plugins is no longer recommended: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/plugins. So we may run into some false positive if some browser decides to not disclose the plugins list as part of protecting the privacy of the user.

@xnerhu
xnerhu requested a review from bayotop November 25, 2024 09:09
@xnerhu
xnerhu requested review from r-valitov and xnerhu November 25, 2024 09:09
@unixfox

unixfox commented Jan 14, 2025

Copy link
Copy Markdown
Author

hello @xnerhu @r-valitov any update on this PR :)? I have been using on my own website and I haven't had any user complain anymore.

osbre added a commit to osbre/BotD that referenced this pull request Dec 18, 2025
igneel64 pushed a commit to snowplow/snowplow-javascript-tracker that referenced this pull request Aug 18, 2026
…ngth detector

BotD's `detectPluginsLengthInconsistency` reports any non-Android Chromium
browser with `navigator.plugins.length === 0` as headless Chrome. Chrome's
`--headless=new` mode now reports plugins like a headed browser, while
privacy-focused browsers legitimately report none, so the check only yields
false positives.

Rather than patch the dependency, compose BotD's exported `collect`/`detect`
with our own detector set. A pnpm patch would only reach the UMD build, since
the ESM build keeps `@fingerprintjs/botd` external and npm consumers would
resolve their own unpatched copy.

Mirrors fingerprintjs/BotD#194, which is approved
upstream but unmerged and so absent from botd 2.0.0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
igneel64 pushed a commit to snowplow/snowplow-javascript-tracker that referenced this pull request Aug 19, 2026
…ngth detector

BotD's `detectPluginsLengthInconsistency` reports any non-Android Chromium
browser with `navigator.plugins.length === 0` as headless Chrome. Chrome's
`--headless=new` mode now reports plugins like a headed browser, while
privacy-focused browsers legitimately report none, so the check only yields
false positives.

Rather than patch the dependency, compose BotD's exported `collect`/`detect`
with our own detector set. A pnpm patch would only reach the UMD build, since
the ESM build keeps `@fingerprintjs/botd` external and npm consumers would
resolve their own unpatched copy.

Mirrors fingerprintjs/BotD#194, which is approved
upstream but unmerged and so absent from botd 2.0.0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants