4 ms·
https://arh.antoinevastel.com/javascripts/fpCollect.min.js https://arh.antoinevastel.com/javascripts/fpCollect.min.js contains some functions called redPill tha
by ggreer 7y ago
https://arh.antoinevastel.com/javascripts/fpCollect.min.js https://arh.antoinevastel.com/javascripts/fpCollect.min.js contains some functions called redPill that aren't in the normal fpCollect library. redPill3 measures the time of some JS functions and sends that data to the backend. Here's a chart of redPill3's timing data on my computer: https://i.imgur.com/c8iuV6I.png https://i.imgur.com/c8iuV6I.png
Those are averages of multiple runs on a Core i7-8550U running Chromium 75.0.3770.90 on Ubuntu 19.04.
isNan and isFinite are much slower in headless mode, but other functions like parseFloat and parseInt aren't. My guess is that the backend is comparing the relative times that certain functions take. If isNan and isFinite take the same time as parseFloat, then you're not in headless mode. If those functions take 6x longer than parseFloat, you're in headless mode.
I don't know if this holds true for non x86 architectures or other platforms.
- TeMPOraL 7y agoHuh. Your chart reminded me of an experiment I did 10 years ago to test if you could distinguish whether an image request was triggered by <img> tag, vs. user clicking on a link (or entering its URL in the address bar). I created a test page and asked people on the Internet to visit it, and then analyzed PHP & server logs. Unexpectedly, it turned out that Accept header was perfect for this. The final chart was this: https://i.imgur.com/ZA8qD8t.png https://i.imgur.com/ZA8qD8t.png ("link" means clicking on an URL or entering it manually; "embedded" means <img> tag) Makes me wonder whether Accept header is still useful for fingerprinting in general, and distinguishing between headless and headful(?) browsers in particular.