Halaman ini belum tersedia dalam bahasa Anda. Anda membaca teks bahasa Inggris.
Glossary
navigator.webdriver
navigator.webdriver is the value a browser sets to true while an automation tool is at its controls.
Why one reading outweighs the rest
A fingerprint is an argument assembled from many answers. This one is not an argument at all, because the browser is replying to a direct question about itself.
The reading costs a site nothing
One property, no permission prompt, and an answer before the page has finished loading.
It is not a matter of rarity
Other readings say how unusual you are. This one says whether a person is at the keyboard.
It never travels alone
A build running without a window names itself in the string it reports and often carries an empty plugin list, so all three are read together.
Your browser right now
These values are read in your browser on this page and nothing leaves it. The first row is what a bot check asks for before anything else.
Perangkat Anda, saat ini
- Automation flag
- mengukur di perangkat Anda
- Plugins in the list
- mengukur di perangkat Anda
- The name it reports
- mengukur di perangkat Anda
Dibaca di peramban Anda dan ditampilkan di sini. Tidak ada yang dikirim ke mana pun.
What turns the value on
The browser raises it by itself whenever a control channel it recognises is open. Page code neither sets it nor takes it back down.
- 1
A driver attaches
The familiar case: a testing framework takes the browser over, and the browser says so.
- 2
A debugging port is opened
The open port alone is enough, even before any program has attached to it.
- 3
A window-less build starts
A build started without a window renames the browser in the string it reports, in the newer mode too.
What our engine does
Automation here runs over a channel bound to your own machine, and that is how a flow and the window synchronizer drive a profile. The launch line carries a switch that keeps the automation reading down while that channel is open.
On the acceptance run of the build shipping today the value came back negative, and the property behind it still read as part of the browser rather than as page code.
The value is read from a real page
The stand starts the engine with the arguments the app uses and asks the page, instead of trusting the launch line.
falseThe property still reads as the browser's own
The self-test prints the source behind the value, and page code cannot produce that source.
native codeThe reported name carries no mark
The string the browser uses for itself names no window-less build.
no mark
Hiding it badly is its own mark
The value can be overwritten from page code, and the overwrite leaves traces. The property stops reading as the browser's own, and the same question asked inside a frame or a background thread comes back untouched.
The source gives it away
Print the property behind the value: a hand-written one shows its own code where a browser shows none.
Other realms get asked
A frame and a background thread carry their own copy of the browser interface, and a page may ask either of them.
Removal is worse than answering
A browser missing the property entirely is rarer than one that answers, so deleting it draws the attention it was meant to avoid.
How to check your own
The panel above answers for the browser you are reading this in. Inside the app the self-test runs in a profile, against the engine that profile launched.
It asks for the value and for the source of the property behind it, in the page the profile opened. A frame and a background thread are asked separately, and what is compared there is the machine the profile claims.
What this does not do
- It does not hide the rhythm of a script. Even pauses, identical paths and a session that never hesitates give automation away long after this reading is settled.
- It does not close the channel automation needs. Anything running on the same computer can see that a browser was started with one open, because the launch line is readable there.
- It does not answer for a browser the app did not start. The panel above reads your everyday browser, and a profile answers only inside the app.
- It does not undo a link between two accounts. Address reputation and account history close more of them than any single reading does.
Check it
Every claim above comes from a file you can open.
- The value is read from a real page after a real launch
- apps/desktop/test/webdriver-flag.js
- Where the launch line is built
- apps/desktop/src/lib/forkEngine.js
- The self-test asks for the value and for its source
- apps/desktop/src/lib/fpAudit.js
- One profile opened with a window and without it, field by field
- apps/desktop/test/скрытый-режим-живьём.js
- The acceptance run of the build shipping today
- engine/приёмка-отчёт.json
Questions
- Does this value identify me?
- No. It reads the same on almost every browser on earth, so it separates nobody. What it does for a site is disqualify a session before any other reading is weighed.
- Can I set it to false from the console?
- You can, and the property then carries the source of what you typed. A check that prints that source tells it apart from a browser answering on its own.
- Does the free check on this site read it?
- The panel above does. The fingerprint check reads what differs between machines, and this reading is the same almost everywhere.
- Does a profile without a window answer differently?
- It should not, and a stand settles it: one profile is opened both ways and the two machines are compared field by field, down to the drawing. The reported name is read in the same pass and checked for a window-less mark.
- Why keep a control channel open at all?
- Because flows and the window synchronizer drive a real profile through it. The channel stays on your own machine, and the browser does not announce it to a page.
See what your own profile answers
The self-test runs inside a profile and shows all 29 measurements, green and red alike.