- A spoofed browser and a proxy address must tell the same story about time, place, language and connection; rotating proxies break that story.
- Spoofing stops at JavaScript and headers: the TLS handshake and HTTP/2 behaviour come from the real network stack.
- The proxy address has a shared history the profile cannot reset; network intelligence catches the half the operator did not build.
- One mismatch is a reason for review; stacked, independent contradictions are the profile-farm pattern that justifies a block.
On this page
An antidetect browser is only half of a disguise. Every commercial antidetect product sells profiles with a proxy slot, because a spoofed browser on the operator’s real home connection would be linked by its address within a day. The profile tells one story (a Windows laptop, Chrome, Berlin, German keyboard) and the proxy has to tell the same story at the network layer. Detection that treats the two halves as one visit finds the places where they disagree.
This guide lists those places and how to check them without inventing a benchmark. For what the browser half changes, start with what an antidetect browser really does; for the network half, see the residential proxy detection guide.
The disguise has two halves that must agree
Profile settings are chosen once, when the profile is created. The proxy is chosen per session, often from a pool that rotates, and the operator may run dozens of profiles in one sitting. Anything that has to be consistent between the two — time, place, language, connection type, network stack — is a maintenance burden for the fraudster and a check for you. The tools know this: several advertise “time zone from IP” and “language from IP” features precisely because a mismatch is a common way profiles get caught. Those features work only while the profile keeps the proxy it was configured for.
Time zone and language versus the address
A browser exposes its clock through Intl.DateTimeFormat().resolvedOptions().timeZone and its offset through Date; it exposes preferred languages through navigator.languages and the Accept-Language header. The proxy address has a country and, for most consumer networks, a city-level location. A visitor whose browser reports America/Chicago while the address sits in Lagos is not necessarily a fraudster — travellers, VPN users and people on a company network all produce this — but it is a mismatch worth weighing, and it is exactly the mistake a rotating proxy pool makes for the operator.
Maskbreak compares the browser’s reported time zone with the address in the same evaluation. An eligible mismatch adds the timezone_mismatch reason and can move an allow decision to review; it never blocks on its own, because the innocent explanations are too common. The full rule is described in the API reference and openapi.json.
Wire it into your own app: a free key returns decision, risk_score and reasons for every visit, 1,000 requests an hour, no card.
Get an API keyConnections that bypass the proxy
An HTTP proxy carries the page and its requests. It does not automatically carry everything the browser does. WebRTC gathers connection candidates as described in RFC 8445, and a candidate can carry an address the proxy never saw. DNS lookups may resolve locally rather than through the proxy. Antidetect browsers therefore ship switches to disable WebRTC, fake its addresses or force DNS through the tunnel. Each switch is another consistency question: a mainstream browser with WebRTC disabled, or one that reports a WebRTC address that does not match its HTTP address, looks different from the ordinary consumer Chrome the profile claims to be.
Transport fingerprints do not read navigator
Everything a profile spoofs lives in JavaScript and HTTP headers. The TLS handshake and HTTP/2 settings are produced by the actual network stack underneath, and most antidetect products are Chromium builds. A profile that presents Safari on macOS in its user agent while opening connections like Chromium on Windows has contradicted itself before a single script runs. JA4 TLS fingerprinting covers what that handshake reveals. Chromium’s own user agent reduction has already made the user agent string a weak claim on its own, which is why a modern check compares claims across layers rather than reading one field.
The proxy pool has a history the profile cannot rewrite
A fresh profile has no past. Its proxy address does. Residential proxy addresses are shared among a provider’s customers and rotate through many operators; the same address appears on other sites, in other operators’ sessions and in abuse reports. Network intelligence that recognises a residential proxy network, and names the service when it is known, catches the half of the disguise the operator did not build and cannot reset. Maskbreak reports this as network.proxied, which the base policy blocks, with network.service filled in when the provider is known.
Where the halves can disagree
| Browser claim | Network fact | Why it leaks |
|---|---|---|
| Time zone and locale | Country and city of the address | Profiles are configured once; proxies rotate per session |
| Consumer browser on a home network | Address belongs to a residential proxy service or a hosting provider | The proxy pool has a reputation the profile never sees |
| User agent: Safari or Firefox | TLS and HTTP/2 behaviour of a Chromium build | Spoofing stops at JavaScript; the transport is real |
| Ordinary WebRTC support | WebRTC disabled, faked or reporting a different address | Leak prevention itself becomes a signal |
| One visitor, one device | Several profiles through one address within minutes | Operators batch their work through one proxy slot |
| Stable device between visits | Different address, country or provider each visit | Session-level proxy churn |
What to do with a mismatch
Treat one mismatch as a reason to look, not as proof. A single contradiction should raise a visit to review: hold the protected action, ask for a step you can verify (an email code, a payment authorisation, a signed-in session), and let the person finish if they pass. Two or three independent contradictions — a spoofed browser, a proxy address and a time zone that belongs to neither — are the pattern a profile farm produces, and that is where a block is justified. Keep the evidence separate in your logs: which checks ran, which fired and which were unavailable. Maskbreak lists that in device.checked_signals and device.complete, so a “no tampering” result can be told apart from a check that never happened. How to test antidetect detection describes a test plan that keeps those cases apart, and VPN detection without blocking real customers covers the review step in detail.
Questions people ask
- Does a time zone mismatch prove an antidetect browser?
- No. Travellers, VPN users and people on a company network produce the same mismatch. Maskbreak treats an eligible mismatch as a reason to move an allow decision to review, never as a block on its own; it becomes strong evidence only alongside a spoofed browser or a proxy address.
- Can an antidetect browser fake its TLS fingerprint?
- The values a profile changes live in JavaScript and HTTP headers. The TLS handshake and HTTP/2 settings are produced by the underlying network stack, and most antidetect products are Chromium builds, so a profile claiming Safari or Firefox can contradict itself at the transport layer before any script runs.
- Why does the proxy matter if the browser is already spoofed?
- Because the proxy address is shared and has a past. Residential proxy pools rotate through many operators and sites, and network intelligence recognises those services, naming the provider when it is known. The profile is new every time; the address is not.
- What should a mismatch trigger in my application?
- Hold the protected action and ask for a step you can verify, such as an email code or a signed-in session, then continue if the person passes. Block when several independent contradictions stack, and keep the evidence separate so an unavailable check is never counted as a clean one.
Paste it in, then watch the verdicts
The public sk_test_sandbox key returns the documented allow, review and block shapes with no account, so the failure path is testable before you go live. SDKs for Node, Python and PHP, or plain HTTP. The <a href="/api">API reference</a> and the <a href="/pricing">free tier</a> cover the rest.