<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yahor Papou</title>
    <description>The latest articles on DEV Community by Yahor Papou (@egormajj).</description>
    <link>https://dev.to/egormajj</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F885123%2F5f3478f2-2d0b-420b-a17d-bcce63409939.jpeg</url>
      <title>DEV Community: Yahor Papou</title>
      <link>https://dev.to/egormajj</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/egormajj"/>
    <language>en</language>
    <item>
      <title>Best Gaming Fraud Prevention Tools in 2026: 10 Options by Risk</title>
      <dc:creator>Yahor Papou</dc:creator>
      <pubDate>Sun, 11 Oct 2026 21:55:23 +0000</pubDate>
      <link>https://dev.to/shieldlabs/best-gaming-fraud-prevention-tools-in-2026-10-options-by-risk-4752</link>
      <guid>https://dev.to/shieldlabs/best-gaming-fraud-prevention-tools-in-2026-10-options-by-risk-4752</guid>
      <description>&lt;p&gt;A welcome bonus can be claimed by several accounts controlled by one player. A valuable game account can be opened from a device its owner has never used. A bot can create accounts faster than a review team can inspect them. Each problem needs a different kind of evidence.&lt;/p&gt;

&lt;p&gt;That is why a search for the best gaming fraud prevention tool rarely has one universal answer. Video-game publishers need to protect accounts, in-game purchases and virtual economies. Sportsbooks and online casinos also need to protect promotions, verify players and enforce location rules. A payment tool, a device intelligence platform and a geolocation product solve different parts of that job.&lt;/p&gt;

&lt;p&gt;This guide compares ten options by the risk each addresses, the point in the player journey where it works and the work an operator still needs to do. The comparison uses public product documentation reviewed in October 2026. It is an editorial assessment of fit, not a shared hands-on accuracy benchmark.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check before choosing a tool
&lt;/h2&gt;

&lt;p&gt;Start with the loss you can actually observe. Is the same person collecting a welcome offer repeatedly? Are stolen cards being used for in-game purchases? Are automated clients creating accounts? Is the operator required to prove a player's physical location? The answer determines what data the tool must see.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Account and bonus abuse:&lt;/strong&gt; Look for persistent device or visitor identification, links among user accounts and a way to review why accounts were connected. A shared IP alone is weak evidence: families, campuses and mobile carriers can put unrelated players behind one address.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Account takeover:&lt;/strong&gt; Check what happens when an established account appears on an unfamiliar device or from an unusual location. The signal must arrive early enough to protect the next sensitive action.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payments and chargebacks:&lt;/strong&gt; Ask whether the tool sees payment instruments, orders, disputes and game-specific transaction data. A device score alone cannot adjudicate a card dispute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bots and automation:&lt;/strong&gt; Check whether protection runs at the request edge, in the browser, in the app or after an event. These placements affect what the product can stop before a signup or purchase completes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regulated iGaming:&lt;/strong&gt; Verify whether the operator also needs identity and age checks, AML workflows and compliance-grade geolocation. An account-abuse tool does not supply those controls by itself.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tools below are ordered by fit for account and promotion abuse at the web entry point, followed by specialist products for other risks. A game with several problems may need more than one.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. ShieldLabs
&lt;/h2&gt;

&lt;p&gt;ShieldLabs identifies returning visitors and links activity across users, devices and IP addresses. More than 300 device and network signals are cross-checked, with 99.9% identification accuracy and 99.9% risk signal detection accuracy. Each scored interaction has a risk score from 0 to 100 and named signals, including VPN, proxy, Tor, anti-detect browser and browser automation detection.&lt;/p&gt;

&lt;p&gt;Four High-Risk Events are detected out of the box: multi-accounting, account sharing, impossible travel and account takeover. Each event has Medium or High confidence, separate from the risk score. For an iGaming operator, the most direct application is finding several accounts behind a repeated welcome-bonus claim. For a video-game publisher, the same account-linking layer can surface account farms and returning banned users at web signup or login.&lt;/p&gt;

&lt;p&gt;The JavaScript snippet, API and webhooks fit web registration and account flows. ShieldLabs also reports traffic quality by source and campaign, useful when acquisition channels bring farmed signups. It starts with 5,000 free identifications, one time, with no card. Paid plans start at $99 per month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Web-based gaming and iGaming teams that need ready-made account-abuse detection and published self-serve pricing. Pair it with a game-client anti-cheat, payment fraud provider, KYC service or regulated geolocation service where those jobs apply.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. SEON
&lt;/h2&gt;

&lt;p&gt;SEON covers a wider iGaming operations workflow. Its iGaming product combines device and digital-footprint signals with controls for bonus abuse, fake registrations and account takeover. It also offers identity verification, AML and transaction monitoring across the player journey.&lt;/p&gt;

&lt;p&gt;That breadth matters to an operator that wants a fraud and compliance stack spanning registration, deposits and withdrawals. It also means the buying decision should be made around the specific modules and data the operator needs, rather than treating every feature in the suite as part of one device check.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; iGaming fraud teams that need account-linking alongside KYC, AML and transaction workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. SHIELD
&lt;/h2&gt;

&lt;p&gt;SHIELD focuses on persistent device intelligence across web and apps. Its gaming materials cover fake accounts, account takeover, promo abuse and suspicious activity involving game assets. Its public integration guide lists native Android and iOS support as well as Unity, which is relevant when risk must be assessed inside a mobile game rather than only on a website.&lt;/p&gt;

&lt;p&gt;The device-first approach helps connect accounts that change email or network. Operators evaluating it should test the device signals at their actual signup, login and in-app checkpoints, and decide which responses belong in the game's own workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Mobile-first game publishers that need device intelligence in the app and at account checkpoints.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. EveryMatrix Bonus Guardian
&lt;/h2&gt;

&lt;p&gt;Bonus Guardian is a specialist for promotional abuse in iGaming. It analyzes player activity for bonus exploitation and supports responses such as excluding a player from an offer or holding a withdrawal. Its value is in the promotion workflow itself: the operator can evaluate how a player claims, uses and withdraws against an offer.&lt;/p&gt;

&lt;p&gt;There is an important buying constraint. Bonus Guardian is offered to EngageSuite users, so it is a natural shortlist item for an operator already using that stack. A team seeking a standalone web account-identity layer should check integration fit before comparing it with broader fraud platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; EngageSuite operators whose immediate problem is misuse of casino or sportsbook promotions.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Xsolla Anti-Fraud
&lt;/h2&gt;

&lt;p&gt;Xsolla's Anti-Fraud System is built around game commerce. It uses payment and in-game parameters to assess suspicious purchases, supports cross-game analysis and provides dispute assistance. That makes it relevant to stolen-card purchases of currency or items, serial payment abuse and chargebacks.&lt;/p&gt;

&lt;p&gt;Its evidence comes from the purchase and the game's economy. If the pressing problem is a player opening many accounts before making a payment, pair transaction screening with an account and device layer earlier in the journey.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Video-game publishers protecting in-game purchases, payment acceptance and disputes.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. GeoComply Core
&lt;/h2&gt;

&lt;p&gt;For a licensed sportsbook or online casino, proving where a player is can be a requirement, not merely a fraud signal. GeoComply Core verifies location using device and network data and checks for location spoofing. Its gaming product also assesses device integrity and activity such as location jumping, proxy betting and account sharing.&lt;/p&gt;

&lt;p&gt;That is a distinct job from estimating a visitor's location from an IP address. An operator entering a restricted jurisdiction should evaluate geolocation accuracy, coverage and regulatory requirements directly, alongside its account-abuse controls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Regulated betting and casino operators that need compliance-grade geolocation and location-fraud detection.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Sift
&lt;/h2&gt;

&lt;p&gt;Sift assesses fraud across account creation, login, account activity, payments and post-transaction events. Its iGaming offering addresses multi-account bonus abuse, account takeover and risky transactions, with review and automation workflows for fraud teams.&lt;/p&gt;

&lt;p&gt;It is a fit when the operator wants to bring player, device and transaction activity into one investigation and decision process. Compare its operational workflow with the size of your fraud team and the data you can supply at each event.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Larger iGaming operations that need joined-up account, payment and review workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Sumsub
&lt;/h2&gt;

&lt;p&gt;Sumsub brings identity and age verification, KYC and AML checks, plus gaming-specific fraud and player-risk workflows. Its iGaming solution also covers transaction monitoring, bonus abuse and responsible-gaming processes. These functions matter where the operator must establish who a player is and whether they are eligible to play, deposit or withdraw.&lt;/p&gt;

&lt;p&gt;Sumsub also offers device and account-linkage signals, so it should be evaluated for repeat registrations as well as document checks. When bonus claims are the issue, test whether the operator can connect the verified identity, the device and the promotion history in one review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Regulated gaming operators that need player verification and compliance workflows together with fraud controls.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Fingerprint
&lt;/h2&gt;

&lt;p&gt;Fingerprint assigns a persistent visitor ID to a browser or device and supplies Smart Signals for bot activity, VPN use and browser tampering. Its web and mobile integrations make it a useful foundation for recognizing a device that returns with a new account or arrives at a sensitive login.&lt;/p&gt;

&lt;p&gt;The operator still needs a clear policy for what a repeated device means. Fingerprint publishes implementation guides for linking visitor IDs to accounts and building responses on top of them. That flexibility suits an engineering team that wants to own the account graph and enforcement workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Developer teams that want device identification and risk signals as inputs to their own fraud system.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. DataDome Bot Protect
&lt;/h2&gt;

&lt;p&gt;DataDome specializes in detecting and mitigating automated requests to websites, apps and APIs. It can act at the edge, before a bot-driven signup or credential-stuffing request reaches the application. This makes it a strong candidate when attack volume and automation are the immediate problem.&lt;/p&gt;

&lt;p&gt;Bot mitigation and account-linking answer different questions. A real person can operate several bonus accounts without looking like a bot, while an automated client can create thousands of accounts without ever reaching a payment screen. Test the layer that matches the abuse you see.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Gaming platforms facing automated signup, login and API abuse at scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical shortlist by problem
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One player, many accounts or repeated welcome offers:&lt;/strong&gt; Begin with ShieldLabs, SEON or SHIELD. Add Bonus Guardian if promotion usage inside an EngageSuite operation is the central issue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stolen payment methods, virtual-goods purchases or chargebacks:&lt;/strong&gt; Evaluate Xsolla or Sift alongside account signals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Licensed gambling across restricted locations:&lt;/strong&gt; Put GeoComply on the compliance shortlist and Sumsub on the identity and age-verification shortlist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated registrations or credential stuffing:&lt;/strong&gt; Evaluate DataDome at the request edge, then use device and account signals to find the activity that gets through.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A team building its own fraud graph:&lt;/strong&gt; Fingerprint supplies durable visitor and device inputs; the team defines the linking and response workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before buying, run the shortlisted products against the same real account journeys: a legitimate shared household, a returning player after clearing cookies, several bonus claims from linked accounts, an unfamiliar device on a valued account and a burst of automated signups. Ask for the raw reason behind each result. A tool that catches abuse but cannot explain its false positives will be hard to operate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four mistakes that make a fraud-tool pilot misleading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Calling every linked account abuse.&lt;/strong&gt; One household can share a device, and some games allow alternate accounts. Review the account relationship alongside offer claims, timing and the game's rules before taking action.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing only known bad players.&lt;/strong&gt; Run legitimate households, shared networks and returning players through the same pilot. The rate of unnecessary challenges and manual reviews belongs in the buying decision.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expecting one score to cover every stage.&lt;/strong&gt; An account score does not see a card dispute unless payment data is supplied. A payment screen does not establish whether a new player claimed the same welcome offer under an earlier account.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treating account links as proof of gameplay collusion.&lt;/strong&gt; Device and account connections can identify a group worth reviewing. Demonstrating coordinated play or wagering also requires game or betting events.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Which types of fraud should gaming platforms check first?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start with the points where the platform loses value: duplicate accounts and repeated offers at signup, account takeover at login, automated account creation, and fraudulent purchases or chargebacks. A regulated sportsbook or casino must also check player identity, age and location. In-game cheating and collusion need game or betting telemetry beyond an account-level check.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are gaming fraud and iGaming fraud the same thing?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They overlap at accounts and payments, but their requirements differ. A video-game publisher may care most about account theft, item markets and in-game purchase fraud. A sportsbook or casino also needs promotion controls, identity and age verification, location compliance and checks around deposits and withdrawals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does device intelligence replace game-client anti-cheat?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Device intelligence links activity at account and transaction checkpoints. A game-client anti-cheat examines behavior and integrity inside the game. The two can share context, but one does not perform the other's job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the first signal to inspect for bonus abuse?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Look for several accounts connected to the same persistent visitor or device, then examine the offer claims and the risk signals around them. A single shared IP does not establish abuse. Linked accounts plus repeated claims make a stronger case for review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is multi-accounting in gaming?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Multi-accounting means one player operates more than one account. It can be permitted, such as an alternate game account, or abusive, such as opening fresh accounts to reclaim a welcome bonus or evade a ban. Account linkage identifies the relationship; the game's rules and the player's activity establish whether the behavior violates them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How long does a gaming fraud tool take to integrate?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is no useful universal number. A web snippet may return a first device signal quickly, while a production workflow also needs account identifiers, event timing, review rules and false-positive checks. Payments, KYC and regulated geolocation need their own data and checkpoints. Ask each vendor to demonstrate the first useful result in your actual signup, login or purchase flow.&lt;/p&gt;

&lt;p&gt;Gaming fraud prevention works best when the evidence matches the decision. Start with the player action that costs you money or trust, choose the tool that can observe it, and test it on legitimate players as well as abusive patterns.&lt;/p&gt;

&lt;p&gt;For web account and bonus abuse, &lt;a href="https://shieldlabs.ai/pricing" rel="noopener noreferrer"&gt;ShieldLabs offers 5,000 free identifications&lt;/a&gt;, one time.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>security</category>
      <category>webdev</category>
      <category>saas</category>
    </item>
    <item>
      <title>Fingerprinting vs cookies: what actually differs, and what developers should build</title>
      <dc:creator>Yahor Papou</dc:creator>
      <pubDate>Fri, 25 Sep 2026 11:26:10 +0000</pubDate>
      <link>https://dev.to/shieldlabs/fingerprinting-vs-cookies-what-actually-differs-and-what-developers-should-build-1po</link>
      <guid>https://dev.to/shieldlabs/fingerprinting-vs-cookies-what-actually-differs-and-what-developers-should-build-1po</guid>
      <description>&lt;p&gt;Cookies store data locally on a device and stay visible to anyone who opens their browser settings. Fingerprinting builds a server-side identifier from dozens of device and browser signals, and it is far harder to detect, delete, or opt out of. The practical stakes follow directly from that split: cookies fall under user control and standard consent banners, while fingerprinting resists ordinary privacy tools and draws closer regulatory scrutiny because it can persist through the exact actions people take to stop tracking.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fingerprinting can recognize returning visitors across weeks or months by analyzing stable device traits, even after cookies are cleared or private browsing is used.&lt;/li&gt;
&lt;li&gt;Unlike cookies, fingerprinting signals are stored on the server and regenerate with each visit, making them invisible and resistant to user control or opt-out.&lt;/li&gt;
&lt;li&gt;Under privacy law, any method that reads device signals, including fingerprinting, often requires the same consent as non-essential cookies, especially when identifiers are persistent.&lt;/li&gt;
&lt;li&gt;Using a rotating-salt, cookieless approach can provide accurate daily visitor counts without persistent tracking, but it limits long-term recognition capabilities.&lt;/li&gt;
&lt;li&gt;Enterprise-level fingerprinting gathers 300+ device and network signals, such as VPN use, proxies, and automation detection, delivering 99.9% identification accuracy for fraud prevention in challenging conditions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Cookies vs Fingerprinting: A Quick Comparison
&lt;/h2&gt;

&lt;p&gt;Both methods try to answer the same question, whether a visitor has been here before, but they get there through completely different mechanics. The table below breaks down the six dimensions that matter most when you're evaluating &lt;a href="https://shieldlabs.ai/solutions/returning-visitor-recognition" rel="noopener noreferrer"&gt;returning user recognition&lt;/a&gt; or trying to understand what's tracking you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Storage:&lt;/strong&gt; Cookies live in a local file on the user's device; fingerprints are computed and stored server-side.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistence:&lt;/strong&gt; Cookies expire or get cleared; fingerprints regenerate from stable hardware and browser traits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User control:&lt;/strong&gt; Cookies can be viewed, blocked, or deleted in browser settings; fingerprints offer no equivalent on/off switch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detectability:&lt;/strong&gt; Cookies are transparent by design; fingerprinting scripts run quietly in the background.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consent requirements:&lt;/strong&gt; Non-essential cookies generally require opt-in consent; fingerprinting often falls under the same legal obligation despite storing nothing locally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Typical uses:&lt;/strong&gt; Cookies handle logins, carts, and preferences; fingerprinting supports fraud detection, security, and analytics that need to survive a cleared cache.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical takeaway: if you can see it and delete it, it's probably a cookie. If it keeps recognizing you anyway, it's probably not.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do Cookies Work?
&lt;/h2&gt;

&lt;p&gt;A cookie is a small text file a website asks your browser to store, containing a piece of data like a session ID or a saved preference. That's the entire mechanism. No hashing, no hardware signals, just a file sitting in your browser's storage that gets sent back to the server on every request.&lt;/p&gt;

&lt;p&gt;Cookies split into two useful categories. &lt;strong&gt;Session cookies&lt;/strong&gt; disappear the moment you close your browser tab. They're what keeps you logged into a shopping cart while you browse. &lt;strong&gt;Persistent cookies&lt;/strong&gt; stick around for a set expiration date, sometimes days, sometimes years, which is how a site remembers your language preference three weeks later. There's a second split that matters more for privacy: &lt;strong&gt;first-party cookies&lt;/strong&gt; come from the site you're actually visiting, while &lt;strong&gt;third-party cookies&lt;/strong&gt; get set by a different domain (usually an ad network) embedded in that page, and it's third-party cookies that built the ad-retargeting industry of the 2010s.&lt;/p&gt;

&lt;p&gt;Every major browser gives you direct visibility into this system. Chrome, Firefox, and Edge all let you inspect, block, or wipe cookies through their settings menus, and clearing your cookies genuinely breaks the recognition, at least for cookie-based tracking. That user-facing control is precisely why cookies sit differently in privacy law than fingerprinting does: the mechanism is visible, so the consent model built around it, opt-in banners for non-essential cookies, actually works as intended.&lt;/p&gt;

&lt;p&gt;The browser landscape has also been actively closing this door. Safari's Intelligent Tracking Prevention has capped and restricted third-party cookie lifespans for years, and the broader industry shift away from third-party cookies has pushed advertisers and analytics vendors toward alternative identification methods, fingerprinting chief among them. That migration is a big part of why fingerprinting vs cookies has become a live debate rather than a settled question: as one door closes, another quietly opens.&lt;/p&gt;

&lt;p&gt;One nuance that trips people up: not every cookie needs consent. Strictly necessary cookies, the ones that keep a login session alive or remember items in a cart, are generally exempt from opt-in requirements under most cookie law frameworks. It's the non-essential ones, the analytics and advertising cookies, that trigger the consent banners you click through daily.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Does Browser Fingerprinting Work?
&lt;/h2&gt;

&lt;p&gt;Fingerprinting skips local storage entirely and instead builds an identifier out of characteristics your device already broadcasts. A script running on a page can quietly collect your screen resolution, installed fonts, GPU rendering quirks through canvas and WebGL tests, browser plugins, time zone, language settings, and even how your device's audio stack processes a test signal. None of these signals alone is unique. Combined, dozens of them narrow down to a device profile that's often unique among millions of visitors, according to &lt;a href="https://ssd.eff.org/module/what-fingerprinting" rel="noopener noreferrer"&gt;Surveillance Self-Defense's fingerprinting explainer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That combined profile gets hashed into a single identifier and stored on the server, not on your device. There's no file to open, no setting to toggle off, because the "fingerprint" isn't a thing sitting on your machine waiting to be deleted. It's a calculation the server performs every time you show up, based on traits your hardware and browser configuration hand over automatically just by loading a page.&lt;/p&gt;

&lt;p&gt;This is exactly why clearing cookies or switching to private/incognito mode doesn't reliably stop it. A &lt;a href="https://citp.princeton.edu/sites/g/files/toruqf6781/files/documents/Tech%20Brief%20Digital%20Fingerprinting%20%20February%2011-26.pdf" rel="noopener noreferrer"&gt;Princeton CITP technical brief&lt;/a&gt; explains that fingerprint-derived identifiers regenerate instantly after you wipe local storage, because the underlying hardware and browser traits never changed. Private browsing mode blocks cookies from persisting past the session, but it doesn't alter your screen resolution, your installed fonts, or your GPU's rendering signature. The fingerprint comes right back, identical to before.&lt;/p&gt;

&lt;p&gt;That persistence is a double-edged property. Used for cross-site ad profiling without disclosure, it's the kind of stealthy tracking that's drawn increasing public attention, including &lt;a href="https://stories.tamu.edu/news/2025/06/26/websites-are-tracking-you-via-browser-fingerprinting/" rel="noopener noreferrer"&gt;reporting on the rise of fingerprinting&lt;/a&gt; as sites lean on it to replace fading cookie-based methods. Used for fraud detection and account security, the same underlying technique serves a legitimate purpose: recognizing that the device attempting a login or a signup has shown up before under a different account, even after clearing its cookies. The signal is identical. The application, and the disclosure around it, is what separates responsible use from covert profiling.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Are the Key Differences That Actually Matter?
&lt;/h2&gt;

&lt;p&gt;Six dimensions separate these two methods, and each one carries a different practical consequence depending on whether you're a privacy-conscious reader or a product team building recognition logic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3rpnkie33ngy1e0ragph.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3rpnkie33ngy1e0ragph.jpeg" alt="Six differences between cookies and fingerprinting" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Storage location&lt;/strong&gt; is the foundational split. Cookies sit in a file on the user's own device, which means the user technically owns the storage medium. Fingerprints live entirely on the tracker's server, computed from signals the device exposes but never actually written down locally. That's the core reason clearing your browser data deletes one and does nothing to the other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Persistence&lt;/strong&gt; follows directly from storage. A cookie has an expiration date, or vanishes the moment the browser wipes it. A fingerprint has no expiration because it's recalculated fresh each visit from traits that rarely change, screen size, installed fonts, GPU behavior. Engineering-wise, fingerprinting is built for stability across months; cookies are built to expire.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User control and detectability&lt;/strong&gt; diverge sharply too. Every browser ships a visible cookie manager. No browser ships an equivalent "fingerprint manager," because there's nothing local to manage. You can see a cookie in your settings. You generally can't see that a fingerprinting script just ran, unless you're using specialized detection tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consent and legal treatment&lt;/strong&gt;, somewhat counterintuitively, don't follow the same split. Regulators have made clear that the &lt;em&gt;mechanism&lt;/em&gt; doesn't determine the legal obligation, the &lt;em&gt;effect&lt;/em&gt; does. That means a technique with zero local storage can still trigger the same consent requirements as a cookie, a point worth sitting with before assuming "cookieless" automatically means "compliant."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Typical uses&lt;/strong&gt; tend to diverge by design intent rather than capability. Cookies dominate session management, shopping carts, and login persistence, the bread-and-butter of everyday web functionality. Fingerprinting shows up where a business needs recognition that survives a cleared cache: fraud detection, bot mitigation, and account security, where the whole point is catching someone who's actively trying to look like a new visitor.&lt;/p&gt;

&lt;p&gt;Picture three scenarios. A returning customer logging into a loyalty account: a cookie handles that fine, and login state makes it airtight regardless. A user attempting account takeover after wiping their browser data: cookies tell you nothing, because they were cleared along with everything else, but device signals persist and can flag the same hardware attempting entry under a new identity. Measuring unique visitors for analytics: cookies inflate the count every time someone clears their cache, while fingerprinting (used carefully) can hold a more accurate number, though at a real privacy cost if that identifier isn't time-limited.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Do Privacy Regulators Actually Focus On?
&lt;/h2&gt;

&lt;p&gt;Regulators don't care what you call the technique. Article 5(3) of the ePrivacy Directive, the EU rule most commonly cited, applies to storing or accessing information on a user's terminal equipment, and &lt;a href="http://ec.europa.eu/justice/data-protection/article-29/documentation/opinion-recommendation/files/2014/wp224_en.pdf" rel="noopener noreferrer"&gt;Article 29 Working Party's Opinion 9/2014&lt;/a&gt; makes clear the trigger is that technical act, not the word "cookie" specifically. Later EDPB guidance built on that same reading.&lt;/p&gt;

&lt;p&gt;That framing directly covers fingerprinting. Because a fingerprinting script reads dozens of device characteristics off the terminal equipment to build its identifier, that reading act falls within the same scope as setting a cookie, even though nothing gets written to local storage. The practical result: many uses of fingerprinting need the same consent treatment as non-essential cookies, and a site can't dodge that obligation just by swapping the underlying mechanism.&lt;/p&gt;

&lt;p&gt;There's a real exception, though, and it matters. Genuinely privacy-preserving "cookieless" analytics can sidestep consent requirements, but only when the identifier is engineered to expire, not persist. &lt;a href="https://gizmoanalytics.io/en/website-tracking-without-cookies" rel="noopener noreferrer"&gt;Gizmo Analytics describes an approach&lt;/a&gt; that hashes IP address and user agent together with a salt that rotates daily, producing a short-lived identifier good for counting same-day unique visitors without ever creating a stable, cross-day profile. Rotate the salt, and yesterday's identifier stops matching today's, by design. That's a meaningfully different architecture from fingerprinting aimed at long-term stability, and regulators generally treat design intent, expire versus persist, as the dividing line.&lt;/p&gt;

&lt;p&gt;For product teams, a workable compliance checklist looks like this: disclose what signals you collect and why, limit how long any derived identifier stays valid, offer a real opt-out where the law requires one, and document the specific purpose behind persistent recognition rather than defaulting to "just in case." Obfuscating a persistent identifier to dodge a consent banner is exactly the move regulators have flagged as indefensible.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Can You Reduce Tracking, and What Should Developers Build Instead?
&lt;/h2&gt;

&lt;p&gt;If you're trying to limit exposure as an individual, start with realistic expectations. Browser extensions like uBlock Origin and Privacy Badger block a meaningful share of tracking scripts, and browsers with built-in anti-fingerprinting measures (Firefox's Enhanced Tracking Protection and Brave's fingerprinting randomization among them) add friction that basic scripts can't easily defeat. Private browsing mode still has real value for blocking cookie persistence and hiding local history, but don't expect it to stop fingerprinting; the underlying device traits it reads don't change just because you opened an incognito window.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use a browser with built-in anti-fingerprinting protection rather than relying on default settings.&lt;/li&gt;
&lt;li&gt;Install a script-blocking extension and keep it updated, since fingerprinting techniques evolve.&lt;/li&gt;
&lt;li&gt;Treat private mode as cookie protection, not fingerprint protection, and adjust expectations accordingly.&lt;/li&gt;
&lt;li&gt;Check periodically whether a site's cookie banner actually covers fingerprinting scripts, since many don't disclose it clearly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For developers weighing how to build recognition into a product, the choice comes down to how much persistence the use case actually justifies. &lt;a href="https://kitbase.dev/blog/cookieless-analytics" rel="noopener noreferrer"&gt;Kitbase's cookieless analytics explainer&lt;/a&gt; lays out the tradeoff plainly: rotating-salt architectures give you accurate same-day metrics and skip the consent overhead, but they sacrifice the ability to recognize the same anonymous visitor across weeks. If your product genuinely needs that longer-horizon recognition, fraud detection is the clearest example, a durable signal like login state or a disclosed device identifier is the more honest architecture than quietly reaching for fingerprinting to fill the gap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; &lt;em&gt;If your only goal is counting unique visitors without profiling anyone, a rotating-salt, cookieless approach is almost always the better privacy-preserving choice. Save persistent device recognition for cases where the business need, like stopping repeat fraud, genuinely requires it and you can document why.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Does Enterprise-Level Fingerprinting Look Like in Practice?
&lt;/h2&gt;

&lt;p&gt;Consumer-grade fingerprinting scripts typically lean on a handful of signals: canvas rendering, fonts, screen size. Enterprise fraud detection operates on a different scale entirely. ShieldLabs draws on 300+ device and network signals, covering risk signals like VPNs, proxies, Tor, iCloud Private Relay, datacenter IP ranges, anti-detect browser detection, and automation traffic, interpreted through a mix of deterministic rules and AI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fropclt8ok44atnrpardg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fropclt8ok44atnrpardg.jpeg" alt="Multiple fraud signals forming one visitor profile" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The identification layer is built for persistence specifically because fraud actors count on the opposite: cleared cookies, incognito sessions, rotated IPs, months of gaps between attempts. The platform recognizes a returning visitor with 99.9% identification accuracy across exactly those conditions. Every score arrives with the underlying signals attached, so fraud or trust teams can see the reasons behind risk scores rather than relying on an opaque number. The service supplies the score and the signals behind it; teams choose the action for each case: flag it, restrict it, or escalate it for review. Teams that want the signal-level detail can dig into &lt;a href="https://shieldlabs.ai/blog/what-is-device-fingerprinting" rel="noopener noreferrer"&gt;how device fingerprinting works&lt;/a&gt; or browse the broader &lt;a href="https://shieldlabs.ai/blog/tag/device-fingerprinting" rel="noopener noreferrer"&gt;device fingerprinting resource library&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Transparency Should Beat Convenience Every Time
&lt;/h2&gt;

&lt;p&gt;The fingerprinting vs cookies debate keeps getting framed as a technical question when it's really a disclosure question. Nothing about server-side identification is inherently worse than a cookie, the harm comes entirely from doing it quietly. A team that documents exactly what signals it reads, limits how long any derived identifier stays valid, and builds a consent gate around genuinely non-essential tracking has nothing to hide and no reason to obscure the mechanism.&lt;/p&gt;

&lt;p&gt;My honest read: most of the "cookieless is automatically compliant" confusion in this space comes from vendors marketing convenience as virtue. Persistence should be a deliberate, justified choice, not a default setting nobody examined.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Yahor Papou, CMO at ShieldLabs&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Get Signal-Level Visitor Recognition Without the Enterprise Sales Call
&lt;/h2&gt;

&lt;p&gt;Enterprise fraud teams have had access to deep device and network signals for years, usually behind an annual contract and a sales conversation. This platform provides similar depth, including anti-detect browser detection, proxy and VPN scoring, and ready-made detection of multi-accounting, account sharing, impossible travel and account takeover, available self-serve with published pricing from day one. Every risk score comes with the signals that produced it, so teams see why a user was flagged and choose the action for each case rather than relying on a black-box verdict.&lt;/p&gt;

&lt;p&gt;Setup runs through a single JavaScript snippet, roughly five minutes to the first signal, with guides for React, Next.js, Vue, and WordPress, plus server-side SDKs for Node.js, Python, Go, and PHP. The &lt;a href="https://shieldlabs.ai/pricing" rel="noopener noreferrer"&gt;Free plan&lt;/a&gt; covers 5,000 identifications, one time, with no card required, enough to test recognition accuracy against your own traffic before committing to anything. From there, paid plans (Starter, Growth, and Scale) start from 79 USD a month billed yearly, or 99 USD month to month, with per-identification pricing decreasing as volume increases. Check current pricing and plan details to see which tier fits your traffic volume.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is It Better to Accept or Reject Cookies?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rejecting non-essential cookies is generally the safer privacy choice, since it limits third-party tracking and ad profiling without breaking core site functionality. Strictly necessary cookies, like login sessions, typically load regardless of your choice because they're exempt from the consent requirement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which Browser Is Best for Avoiding Fingerprinting?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Browsers with built-in anti-fingerprinting protection, such as Firefox's Enhanced Tracking Protection and Brave's fingerprinting randomization, reduce how reliably a device can be uniquely identified. No mainstream browser eliminates fingerprinting entirely, since the underlying signals it reads are largely unavoidable byproducts of normal web browsing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which Is Safer, Password or Fingerprint Authentication?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This question usually refers to biometric fingerprint login, not browser fingerprinting, and the two are unrelated technologies. Biometric fingerprint authentication is generally considered more resistant to casual compromise than passwords, since it can't be guessed or reused across sites the way a weak password can.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can You Be Tracked Through Cookies?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, cookies can track you across a session or across visits, particularly third-party cookies shared across multiple sites for ad targeting. Unlike fingerprinting, cookie tracking is visible and reversible: clearing your browser's cookies removes the identifier entirely, according to EFF's fingerprinting explainer, which contrasts that reversibility with fingerprinting's persistence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Much Does ShieldLabs Cost for Fraud Detection?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ShieldLabs offers a Free plan covering 5,000 identifications, one time, with no card required, followed by paid tiers at 79, 319, and 799 USD per month billed yearly (99, 399, and 999 USD month to month) depending on volume, all listed on the pricing page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ssd.eff.org/module/what-fingerprinting" rel="noopener noreferrer"&gt;Surveillance Self-Defense: What Is Fingerprinting?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ec.europa.eu/justice/data-protection/article-29/documentation/opinion-recommendation/files/2014/wp224_en.pdf" rel="noopener noreferrer"&gt;Article 29 Working Party: Opinion 9/2014&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://citp.princeton.edu/sites/g/files/toruqf6781/files/documents/Tech%20Brief%20Digital%20Fingerprinting%20%20February%2011-26.pdf" rel="noopener noreferrer"&gt;Princeton Tech Brief: Digital Fingerprinting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gizmoanalytics.io/en/website-tracking-without-cookies" rel="noopener noreferrer"&gt;Gizmo Analytics: Website tracking without cookies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stories.tamu.edu/news/2025/06/26/websites-are-tracking-you-via-browser-fingerprinting/" rel="noopener noreferrer"&gt;Websites are tracking you via browser fingerprinting (TAMU Stories)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://shieldlabs.ai/blog/fingerprinting-vs-cookies" rel="noopener noreferrer"&gt;ShieldLabs blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>security</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Headless browser detection before JS runs: JA4, WebGL and CDP timing</title>
      <dc:creator>Yahor Papou</dc:creator>
      <pubDate>Fri, 25 Sep 2026 11:26:03 +0000</pubDate>
      <link>https://dev.to/shieldlabs/headless-browser-detection-before-js-runs-ja4-webgl-and-cdp-timing-4pb3</link>
      <guid>https://dev.to/shieldlabs/headless-browser-detection-before-js-runs-ja4-webgl-and-cdp-timing-4pb3</guid>
      <description>&lt;p&gt;Headless browsers are detectable with high confidence when independent signals line up. A mismatched TLS/JA4 fingerprint, a SwiftShader-rendered canvas hash, and a lingering CDP artifact rarely occur together in a genuine session. No single check is reliable on its own, which is why the right approach treats detection as evidence, aggregated into a risk score, rather than a pass/fail gate on any one property.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Combining network fingerprints, JavaScript checks, and CDP artifacts offers the most reliable detection of headless browsers with minimal false positives.&lt;/li&gt;
&lt;li&gt;WebGL renderer strings, especially those indicating software rendering like SwiftShader, are among the strongest signals for headless sessions.&lt;/li&gt;
&lt;li&gt;Behavioral patterns such as uniform request animation frame intervals and unnatural mouse movements help distinguish bots from human users over time.&lt;/li&gt;
&lt;li&gt;Network fingerprints like JA4 TLS and HTTP/2 frame ordering detect automation before scripts load, making them high-confidence early signals.&lt;/li&gt;
&lt;li&gt;Using a risk score that aggregates multiple signals helps prevent false positives, allowing proportionate responses based on the overall confidence level.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Layers Produce the Strongest Headless Browser Detection Signals?
&lt;/h2&gt;

&lt;p&gt;Every automated session leaks evidence at several distinct layers, and knowing where each signal originates changes how much you should trust it. Network fingerprints arrive before a single line of page JavaScript executes. Runtime properties and rendering artifacts show up only once the page loads. Behavioral signals accumulate over the course of a session.&lt;/p&gt;

&lt;p&gt;Grouping checks this way matters because some are passive and server-side, while others require active in-page instrumentation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pre-render network layer&lt;/strong&gt;: TLS client hello structure, HTTP/2 frame ordering, and connection metadata, all collectible before rendering starts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript runtime layer&lt;/strong&gt;: navigator properties, permissions, plugin lists, and client hints.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rendering and GPU layer&lt;/strong&gt;: WebGL renderer strings and canvas output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control-channel layer&lt;/strong&gt;: residue left by the Chrome DevTools Protocol and similar automation interfaces.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Behavioral layer&lt;/strong&gt;: timing cadence, mouse and scroll entropy, and interaction patterns over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A session that fails one check in isolation might just be a privacy-hardened browser or an unusual configuration. A session that fails checks across three or four layers simultaneously is a much stronger case. Layering checks this way is also what keeps false positives down, since no individual signal has to carry the full weight of a decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Do JavaScript-Level Checks and Navigator Properties Still Matter?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;navigator.webdriver&lt;/code&gt; is the oldest and most obvious tell in &lt;a href="https://browserinsight.net/blog/headless-browser-detection" rel="noopener noreferrer"&gt;automated browsing sessions&lt;/a&gt;. WebDriver-controlled sessions set this flag to &lt;code&gt;true&lt;/code&gt; by default, and while stealth plugins routinely patch it to &lt;code&gt;false&lt;/code&gt; or delete it, the patch itself often becomes the giveaway. A genuine Chrome property has a native getter defined on &lt;code&gt;Navigator.prototype&lt;/code&gt;. A patched one frequently shows up as an own property on the instance, or a getter whose &lt;code&gt;toString()&lt;/code&gt; output doesn't match V8's native function signature.&lt;/p&gt;

&lt;p&gt;That distinction is checkable directly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compare &lt;code&gt;Object.getOwnPropertyDescriptor(Navigator.prototype, 'webdriver')&lt;/code&gt; against what you'd expect from a stock browser build.&lt;/li&gt;
&lt;li&gt;Call &lt;code&gt;navigator.webdriver.toString.toString()&lt;/code&gt; and check whether it returns &lt;code&gt;"function toString() { [native code] }"&lt;/code&gt; or something a patch script generated.&lt;/li&gt;
&lt;li&gt;Walk the prototype chain with &lt;code&gt;Object.getPrototypeOf()&lt;/code&gt; to confirm the property lives where it should, not injected further down the chain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Beyond the webdriver flag, plugin and MIME-type lists are worth checking for internal consistency. A real Chrome installation reports a specific, small set of built-in plugins (PDF viewer entries, primarily) with matching MIME types. Headless configurations frequently report an empty plugin array, or a mismatched one that doesn't correspond to the reported Chrome version.&lt;/p&gt;

&lt;p&gt;Client hints add another contradiction surface. Compare the legacy &lt;code&gt;navigator.userAgent&lt;/code&gt; string against &lt;code&gt;navigator.userAgentData&lt;/code&gt; (where available) and against feature detection results. A user agent claiming Chrome 120 on Windows that lacks expected Windows-specific font rendering or codec support is inconsistent in a way that's cheap to catch and expensive to fully patch. Language and locale mismatches between &lt;code&gt;navigator.languages&lt;/code&gt;, the &lt;code&gt;Accept-Language&lt;/code&gt; header, and &lt;code&gt;Intl.DateTimeFormat().resolvedOptions().timeZone&lt;/code&gt; round out the picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do CDP Artifacts Reveal Automation After JS Patches?
&lt;/h2&gt;

&lt;p&gt;The Chrome DevTools Protocol is what tools like Puppeteer and Playwright use to drive a browser, and it leaves marks that survive most JavaScript-level stealth patching. This matters because a growing share of anti-detection tooling focuses entirely on faking navigator properties while leaving the control channel untouched.&lt;/p&gt;

&lt;p&gt;Common CDP residue includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Injected global variables left behind by automation frameworks, sometimes named predictably (&lt;code&gt;__playwright&lt;/code&gt;, &lt;code&gt;__puppeteer&lt;/code&gt;, or similar patterns depending on the tool version).&lt;/li&gt;
&lt;li&gt;Stack traces that reference CDP-internal frames rather than a clean native call path when errors are thrown deliberately inside a probe function.&lt;/li&gt;
&lt;li&gt;Event-listener counts or ordering that differ from a human-driven session, since CDP commands often attach or manipulate listeners as a side effect.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most resilient of these signals is timing jitter. Every CDP command is a round trip between the controlling process and the browser, and that round trip introduces latency that doesn't exist in native user interaction. CDP roundtrips and their control-channel residue are difficult to eliminate entirely, even in sessions where every obvious JS flag has been scrubbed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; &lt;em&gt;Measure the delay between dispatching a synthetic &lt;code&gt;requestAnimationFrame&lt;/code&gt; callback and its execution across several hundred frames. A CDP-driven session shows a measurably different jitter distribution than a native render loop, even when every navigator property looks clean.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Do WebGL Renderer Strings Really Expose Headless Sessions?
&lt;/h2&gt;

&lt;p&gt;Yes, and it's one of the highest-confidence checks available. Headless environments frequently lack access to real GPU hardware, so they fall back to software rendering, most commonly Google's SwiftShader implementation. That fallback is visible directly through the WebGL API.&lt;/p&gt;

&lt;p&gt;Here's how to read it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Get a WebGL context and call &lt;code&gt;getExtension('WEBGL_debug_renderer_info')&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Query &lt;code&gt;gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL)&lt;/code&gt; and inspect the returned string.&lt;/li&gt;
&lt;li&gt;Flag strings containing "SwiftShader," "llvmpipe," or other known software-rendering identifiers, since real consumer hardware almost never reports these.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://dev.to/agenthustler/headless-browser-detection-how-sites-know-youre-a-bot-47g"&gt;WebGL rendering anomalies tied to software renderers are among the most reliable headless indicators available&lt;/a&gt;, largely because faking a convincing GPU renderer string while actually running on software rendering requires spoofing the entire rendering pipeline, not just one string value.&lt;/p&gt;

&lt;p&gt;Canvas fingerprinting adds a second layer of confidence on top of the renderer string. When you draw the same shapes, text, and gradients to a canvas element and hash the pixel output, software renderers tend to produce hashes that cluster tightly together across different machines, because they're all running the same rendering math instead of real, varied GPU hardware. A deeper look at &lt;a href="https://shieldlabs.ai/blog/what-is-webgl-fingerprinting" rel="noopener noreferrer"&gt;how WebGL fingerprinting works&lt;/a&gt; covers the hashing approach in more detail. Pairing the canvas hash with frame-timing measurements, since software rendering tends to produce more uniform frame times than hardware acceleration, cuts down on false positives from legitimate low-end devices.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Timing and Behavioral Signals Separate Bots From People?
&lt;/h2&gt;

&lt;p&gt;Rendering and network checks catch a lot, but timing and interaction patterns catch what's left. The core idea is that human interaction with a page has irregularities that scripted interaction doesn't bother to fake, because faking them convincingly is expensive.&lt;/p&gt;

&lt;p&gt;Useful signals in this category:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;requestAnimationFrame cadence&lt;/strong&gt;: capture a sequence of &lt;code&gt;performance.now()&lt;/code&gt; timestamps across consecutive rAF callbacks; native rendering loops show natural variance tied to display refresh rate, while some automation frameworks show suspiciously uniform intervals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mouse movement entropy&lt;/strong&gt;: real cursor paths have acceleration curves and micro-corrections; synthetic mouse events dispatched via CDP or &lt;code&gt;dispatchEvent&lt;/code&gt; tend to move in straight lines or teleport between coordinates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scroll behavior&lt;/strong&gt;: genuine scrolling has variable velocity and momentum; programmatic scrolling often jumps to exact pixel offsets instantly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interaction timing relative to page load&lt;/strong&gt;: a click registering within milliseconds of DOM ready is far more common in scripts than in people.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key design decision is window length. Short-window checks (a few seconds) catch obvious automation fast but produce more false positives from legitimate power users or accessibility tooling. Longer-window checks, aggregated over a full session, are more accurate but slower to act on. Most production setups run both: a fast heuristic for early flagging, and a longer behavioral profile that adjusts the risk score as more data accumulates.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do TLS and HTTP/2 Fingerprints Catch Bots Before JS Runs?
&lt;/h2&gt;

&lt;p&gt;Network-level fingerprinting catches automation before a single page script executes, which makes it one of the most valuable early-warning signals available. The two most useful techniques here are JA3/JA4 TLS fingerprinting and HTTP/2 frame-level analysis.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;JA3/JA4 fingerprints&lt;/strong&gt; are derived from the TLS ClientHello message: the cipher suites offered, extensions included, and their ordering. TLS and HTTP/2 settings are critical pre-rendering signals that expose mismatches between a claimed User-Agent and the actual network stack. A request claiming to be Chrome 120 but presenting a ClientHello structure that matches Python's &lt;code&gt;requests&lt;/code&gt; library or a headless Chromium build with a stripped-down cipher list is lying somewhere, and JA4 makes that mismatch easier to catch than its predecessor. A closer look at &lt;a href="https://shieldlabs.ai/blog/ja4-fingerprinting" rel="noopener noreferrer"&gt;JA4 fingerprinting and how it improves on JA3&lt;/a&gt; explains the underlying structure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP/2 frame ordering and SETTINGS values&lt;/strong&gt; offer a second, independent check. Real browsers send SETTINGS frames in a specific, engine-determined order with particular initial values for window size and header table size. Many scripting libraries and headless configurations use HTTP/2 implementations with different defaults, and that difference is visible at the frame level without touching application content.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Both techniques share a critical advantage: they operate underneath naive user-agent spoofing entirely. Changing the &lt;code&gt;User-Agent&lt;/code&gt; header is trivial. Reproducing an authentic browser's exact TLS handshake and HTTP/2 settings profile requires either running that actual browser engine or a purpose-built TLS stack that mimics it precisely, which is a meaningfully higher bar. Background on how TLS fingerprinting and JA3/JA4 work covers the collection method in more depth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; &lt;em&gt;Log JA4 fingerprints server-side alongside the User-Agent header for every request during a testing window, then flag any User-Agent that maps to more than one distinct JA4 value across your traffic. Legitimate browser versions produce a narrow, predictable set of fingerprints; scripted traffic often doesn't.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Do Codec, Permission, and Font Checks Catch Impersonation?
&lt;/h2&gt;

&lt;p&gt;Capability mismatches are cheap contradiction checks that catch impersonation attempts that got the obvious properties right but missed the details underneath.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;HTMLMediaElement.canPlayType()&lt;/code&gt; returns different codec support depending on the actual browser build and OS. A session claiming to be Chrome on Windows that reports unusual codec support (or none) for formats Chrome handles natively is inconsistent with its own claimed identity.&lt;/li&gt;
&lt;li&gt;The Permissions API (&lt;code&gt;navigator.permissions.query()&lt;/code&gt;) should behave logically: querying camera or microphone permission on a headless session with no media devices attached often returns states that don't match what a real device with those peripherals would report.&lt;/li&gt;
&lt;li&gt;Font enumeration and glyph rendering differ subtly across operating systems and browser builds. A page that measures text rendering width for a specific font list can catch a session claiming macOS while rendering fonts consistent with a Linux container, which is exactly the kind of environment many headless deployments run in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these checks are decisive alone, but each adds one more contradiction to a growing case.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Should You Test and Validate Detection Signals?
&lt;/h2&gt;

&lt;p&gt;Building detection logic without a repeatable test harness is a good way to ship checks that either miss real automation or flag legitimate users. A structured validation process avoids both failure modes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build a local comparison harness.&lt;/strong&gt; Run the same page against a real headed browser and its headless counterpart (Puppeteer, Playwright, Selenium) on identical hardware, and log every signal side by side: canvas hash, &lt;code&gt;UNMASKED_RENDERER_WEBGL&lt;/code&gt; value, navigator descriptors, and TLS fingerprint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Correlate network and JS-layer signals server-side.&lt;/strong&gt; Since JA4 fingerprints arrive before any page script runs, tag each session server-side at connection time, then join that tag against the JS-layer signals captured later in the request lifecycle to build a labeled dataset.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintain a regression suite.&lt;/strong&gt; Testing both headed and headless runs while capturing canvas hashes, renderer strings, and TLS fingerprints gives you a baseline to re-run whenever a browser engine or automation library updates, since minor version bumps regularly shift these values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep dataset hygiene tight.&lt;/strong&gt; Separate true positives, false positives, and ambiguous cases explicitly, and re-evaluate thresholds against fresh traffic on a fixed schedule rather than assuming static thresholds age well.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How Do You Turn Signals Into a Risk Score and a Response?
&lt;/h2&gt;

&lt;p&gt;Blocking on any single failed check is a fast way to lock out legitimate users running privacy tools, unusual hardware, or accessibility software. A risk score built from multiple independent signals reduces false positives compared with treating any one check as a binary gate.&lt;/p&gt;

&lt;p&gt;Practical patterns worth building in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Weight network-layer and rendering-layer signals more heavily than any single JS property, since they're harder to spoof convincingly.&lt;/li&gt;
&lt;li&gt;Use graduated responses tied to score bands: passive monitoring at low risk, silent friction (extra verification steps, slower response times) at medium risk, and hard challenges or manual review only at high risk.&lt;/li&gt;
&lt;li&gt;Log which specific checks fired and their raw values, not just a final score, so the rule can be audited and re-tuned later.&lt;/li&gt;
&lt;li&gt;Revisit thresholds regularly against fresh traffic, since automation tooling and stealth patches evolve continuously.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; &lt;em&gt;Never let a single high-weight signal override the aggregate score in isolation. A legitimate user on a locked-down corporate browser can trip one or two checks; a real automated session trips several at once. The pattern across signals is what should drive the response, not any one flag.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How Does a Fraud Detection Platform Turn Raw Signals Into a Score?
&lt;/h2&gt;

&lt;p&gt;A detection layer built specifically for this problem consolidates the checks above into a single, explainable output instead of leaving every team to build and maintain its own signal collection pipeline from scratch. ShieldLabs collects 300+ device and network signals per visit and returns them alongside a risk score rather than a black-box verdict.&lt;/p&gt;

&lt;p&gt;The relevant signal categories map directly onto what's covered here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Network-layer signals, including TLS/JA4 fingerprints and connection metadata, surfaced through &lt;a href="https://shieldlabs.ai/products/network-intelligence" rel="noopener noreferrer"&gt;network intelligence&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Device and runtime signals, covering rendering artifacts, navigator inconsistencies, and automation residue, surfaced through device intelligence.&lt;/li&gt;
&lt;li&gt;Persistent identification logic that recognizes a returning device across sessions even when cookies are cleared or IPs rotate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Integration follows a two-part model: a JavaScript snippet collects client-side signals, and a server-side SDK (available for Node.js, Python, Go, and PHP) returns the risk score and signals to your backend. You choose the action for each case: review a session in the Suspicious band (30–59), or require stronger proof of identity in the Dangerous band (60–100), with the score and its underlying signals always visible rather than hidden inside an opaque decision.&lt;/p&gt;

&lt;p&gt;That auditability matters for tuning over time. Every score arrives with the specific signals that produced it, so a team can trace a false positive back to the exact check that fired and adjust from there instead of guessing at what changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Are the Ethical Limits of Headless Browser Detection?
&lt;/h2&gt;

&lt;p&gt;Detection logic touches the same signals used for legitimate accessibility tooling, automated testing, and privacy-conscious browsing, which makes proportionality a real design constraint, not an afterthought.&lt;/p&gt;

&lt;p&gt;Automated testing frameworks, uptime monitors, and accessibility tools running headless browsers are not fraud. A detection system that treats every headless signal as hostile will flag QA pipelines, monitoring services, and screen-reader-adjacent tooling right alongside scraping bots and account takeover attempts. Building in an allowlist path for known-good automated traffic, verified through means other than the browser signals themselves, avoids that collateral damage.&lt;/p&gt;

&lt;p&gt;Privacy is the second constraint. Canvas fingerprinting, WebGL renderer queries, and behavioral tracking are the same techniques used for cross-site tracking, and running them without any disclosure invites both regulatory scrutiny and reasonable user objection. Collecting these signals for fraud and abuse prevention is a different purpose than ad tracking, and that distinction should show up in how the data is retained, who can access it, and how long it's kept, not just in a privacy policy nobody reads.&lt;/p&gt;

&lt;p&gt;Proportional response matters as much as accurate detection. A medium-confidence signal should trigger a step-up in friction, not an automatic ban. Reserving hard blocks for high-confidence, multi-signal cases keeps the false-positive cost low, and keeps the system defensible if a legitimate user ever asks why they were flagged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Does Headless Browser Detection Actually Get Used?
&lt;/h2&gt;

&lt;p&gt;The theory matters, but the operational value shows up in specific, recurring scenarios across industries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Account abuse prevention.&lt;/strong&gt; Free-trial abuse and multi-accounting schemes frequently rely on scripted signups run through headless browsers to create dozens or hundreds of accounts quickly. Network and rendering signals catch the automation layer even when each account uses a different email and IP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ad fraud detection.&lt;/strong&gt; Automated traffic generating fake ad impressions or clicks is a persistent problem for publishers and ad networks, and headless browsers are a common tool for generating that traffic at scale because they're cheap to run in bulk on cloud infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scraping and content protection.&lt;/strong&gt; E-commerce sites monitoring for competitor price scraping, and media sites protecting paywalled content, both rely on the same layered signals to distinguish scripted scraping tools from real visitors browsing normally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkout and payment flows.&lt;/strong&gt; Fintech and e-commerce platforms watch for headless sessions attempting to test stolen card numbers or exploit promo codes at volume, since manual testing at that speed isn't feasible for a person.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Loyalty and referral programs.&lt;/strong&gt; Gaming and iGaming platforms in particular see scripted sessions farming referral bonuses or loyalty points across large numbers of fabricated accounts, often behind the same connection.&lt;/p&gt;

&lt;p&gt;In every one of these cases, the detection layer flags the risky session, and you choose the action for each case, whether that's a manual review queue, a temporary hold, or simply excluding that traffic from analytics.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffbm0qbkgog4lxf1tgxl0.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffbm0qbkgog4lxf1tgxl0.jpeg" alt="Five operational uses for headless detection" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Which Automation Frameworks Are Easiest to Detect?
&lt;/h2&gt;

&lt;p&gt;Not all automation tools leave the same footprint, and the differences matter when you're deciding where to focus detection effort.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Selenium&lt;/strong&gt; tends to be the easiest to catch. Its WebDriver protocol implementation sets &lt;code&gt;navigator.webdriver&lt;/code&gt; reliably, and older Selenium versions in particular leave characteristic artifacts that detection scripts have targeted for years, making it a well-documented baseline case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Puppeteer&lt;/strong&gt;, which drives Chromium directly through CDP, patches many JS-level checks more thoroughly out of the box, but that's precisely why CDP-layer timing and control-channel artifacts matter more for catching it. Its default headless mode also tends to surface SwiftShader rendering unless specifically configured otherwise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Playwright&lt;/strong&gt; supports multiple browser engines (Chromium, Firefox, WebKit) and has more mature built-in stealth behavior than either of the other two by default, which pushes detection further toward network fingerprints and behavioral signals rather than obvious JS properties.&lt;/p&gt;

&lt;p&gt;None of these frameworks is inherently more or less "detectable" in some fixed sense; detectability depends heavily on configuration, the stealth plugins layered on top, and which signal categories a given detection setup actually checks. A team relying solely on &lt;code&gt;navigator.webdriver&lt;/code&gt; will catch unmodified Selenium easily and miss a well-configured Playwright session entirely. A team combining network fingerprints, rendering checks, and CDP timing analysis closes most of that gap regardless of which framework is driving the browser underneath.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fktvf7ube60yfst9nod3j.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fktvf7ube60yfst9nod3j.jpeg" alt="Which Automation Frameworks Are Easiest to Detect?: overview diagram" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical trade-offs when treating headless signals as evidence
&lt;/h2&gt;

&lt;p&gt;Every detection rule trades sensitivity against user impact, and there's no threshold that eliminates that trade-off entirely. Push too aggressively on any single signal and you'll catch privacy-conscious users, QA pipelines, and accessibility tooling alongside real abuse. Tune too conservatively and scripted traffic slips through untouched.&lt;/p&gt;

&lt;p&gt;The practical answer is iteration, not a perfect starting configuration. Run new checks in a monitoring-only mode before they ever affect a live decision, watch what they flag, and adjust weights against real traffic before tightening enforcement. Detection signals age, too, as browser engines and automation libraries update, so a rule set that worked well six months ago deserves a second look now.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Yahor Papou, CMO at ShieldLabs&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Get the Signals and Risk Score Without Building the Detection Stack
&lt;/h2&gt;

&lt;p&gt;Building and maintaining every check covered here, TLS fingerprinting, WebGL analysis, CDP timing, behavioral profiling, is a real engineering investment most teams don't have the bandwidth to sustain long term. A detection platform can collect 300+ device and network signals per visit, including anti-detect browser detection and automated browser traffic, and return them alongside a risk score, so you choose the action for each case. Scores split traffic into three bands, Trusted (0–29), Suspicious (30–59) and Dangerous (60–100), with the specific signals behind each score fully visible rather than hidden in a black box.&lt;/p&gt;

&lt;p&gt;Setup can run through a JavaScript snippet on the frontend and server-side SDKs for Node.js, Python, Go, and PHP, typically reaching a first signal within about five minutes. ShieldLabs offers a one-time free tier of 5,000 identifications with no card required, which can be enough room to test detection accuracy against your own traffic before committing to a paid plan. Start by &lt;a href="https://shieldlabs.ai/products/identification" rel="noopener noreferrer"&gt;exploring the identification product&lt;/a&gt; and running it against a real traffic sample.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/agenthustler/headless-browser-detection-how-sites-know-youre-a-bot-47g"&gt;Dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://browserinsight.net/blog/headless-browser-detection" rel="noopener noreferrer"&gt;Headless Browser Detection: How Selenium &amp;amp; Playwright Are Caught&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://shieldlabs.ai/blog/headless-browser-detection" rel="noopener noreferrer"&gt;ShieldLabs blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>automation</category>
    </item>
    <item>
      <title>10 browser fingerprinting techniques explained</title>
      <dc:creator>Yahor Papou</dc:creator>
      <pubDate>Wed, 16 Sep 2026 20:50:57 +0000</pubDate>
      <link>https://dev.to/shieldlabs/10-browser-fingerprinting-techniques-explained-22m2</link>
      <guid>https://dev.to/shieldlabs/10-browser-fingerprinting-techniques-explained-22m2</guid>
      <description>&lt;p&gt;Browser fingerprinting is the foundation of device intelligence: the way a site recognizes the same visitor without a cookie. Browser fingerprinting techniques are the individual methods a site uses to read attributes of a browser, each one probing a different surface, and combine them into an identifier that recognizes the same visitor again. No single attribute is unique; the power is in the combination. A &lt;a href="https://coveryourtracks.eff.org/static/browser-uniqueness.pdf" rel="noopener noreferrer"&gt;landmark study by the Electronic Frontier Foundation&lt;/a&gt;, published in the 2010 Privacy Enhancing Technologies Symposium proceedings, found that a browser fingerprint carried enough distinguishing detail to single out roughly 84 percent of browsers in its sample.&lt;/p&gt;

&lt;p&gt;The toolkit has grown from a handful of HTTP headers to a layered read across the graphics stack, the audio engine, and the network itself. The consistent pattern is that the attributes a browser can fake in JavaScript are the weak ones, and the techniques that reach down to the real hardware and the connection are the ones that hold up under a tool built to defeat them. This guide walks through the main techniques behind &lt;a href="https://shieldlabs.ai/blog/what-is-browser-fingerprinting" rel="noopener noreferrer"&gt;browser fingerprinting&lt;/a&gt;, what each one reads, and how stable each is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A browser fingerprint is built from many techniques at once. Each reads one attribute, and combined they carry enough distinguishing detail to recognize a returning visitor without a cookie.&lt;/li&gt;
&lt;li&gt;The strongest techniques read what the browser cannot easily hide: how the device renders graphics (canvas, WebGL), processes audio, and negotiates a connection (TLS, network).&lt;/li&gt;
&lt;li&gt;Declared attributes like the user agent are easy to spoof, so they add little on their own. The render-and-hardware techniques are what make a fingerprint stable.&lt;/li&gt;
&lt;li&gt;Anti-detect browsers fake these attributes per profile, but faking many layers consistently is hard, so the contradictions between them are their own detection signal.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What are browser fingerprinting techniques?
&lt;/h2&gt;

&lt;p&gt;Browser fingerprinting techniques are the individual methods a website uses to read attributes of a visitor's browser, with each method probing a different surface such as graphics rendering, audio processing, installed fonts, or the network connection. No single attribute is unique on its own, but together they carry enough distinguishing detail to recognize the same browser, and the device behind it, again without a cookie. These are the methods behind &lt;a href="https://shieldlabs.ai/blog/what-is-browser-fingerprinting" rel="noopener noreferrer"&gt;browser fingerprinting&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How browser fingerprinting works
&lt;/h2&gt;

&lt;p&gt;Browser fingerprinting works by collecting attributes that vary from one device to the next, then combining them into a single identifier. Each attribute on its own is shared by many people; together they narrow the field until the combination is, in most cases, unique. The detail that makes it work is that much of this data is exposed automatically through standard browser APIs, so a script can read it in milliseconds without any permission prompt.&lt;/p&gt;

&lt;p&gt;The techniques split into two families. Declared attributes are values the browser simply reports, like the user agent or the language, and they are trivial to change. Derived attributes are produced by asking the browser or device to do something, render an image, process an audio signal, negotiate a connection, and reading the result. Derived attributes are what give a fingerprint its staying power, because they reflect the real hardware and software underneath rather than a string the user can edit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fshieldlabs.ai%2Fassets%2Fblog%2Fbrowser-fingerprinting-techniques-declared-vs-derived-v5.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fshieldlabs.ai%2Fassets%2Fblog%2Fbrowser-fingerprinting-techniques-declared-vs-derived-v5.webp" width="800" height="446" alt="A diagram contrasting declared attributes like the user agent, which are easy to change, with derived attributes like canvas, GPU, and audio, which reflect the real hardware and are stable"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The main browser fingerprinting techniques
&lt;/h2&gt;

&lt;p&gt;The techniques below are listed roughly from the most stable to the most easily changed. A real fingerprint reads many of them at once. Most of them run inside the browser, canvas, WebGL, audio, fonts, and the declared attributes, while TLS and WebRTC read the layer underneath, the connection and the network, which is why they are harder to fake and pull double duty for anonymity detection. In practice a detection system reads across all of these together.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Technique&lt;/th&gt;
&lt;th&gt;What it reads&lt;/th&gt;
&lt;th&gt;How stable&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Canvas fingerprinting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A hash of how the device renders text and graphics to a hidden canvas&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WebGL fingerprinting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The GPU and graphics driver, read from a rendered 3D scene&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audio fingerprinting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tiny differences in how the device's audio stack processes a generated signal&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TLS fingerprinting (JA3/JA4)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The exact shape of the TLS handshake the browser sends&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WebRTC&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A local or real IP address the browser can expose, even behind a VPN&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Font fingerprinting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Which fonts are installed and how they render&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hardware attributes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CPU cores, device memory, touch points, sensors&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Media device fingerprinting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;How many media devices are connected and of what kind (full labels need camera or mic permission)&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Screen, timezone, language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Resolution, color depth, timezone offset, locale&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;User agent and client hints&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The declared browser, version, and operating system&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Canvas fingerprinting
&lt;/h3&gt;

&lt;p&gt;Canvas fingerprinting asks the browser to draw text and shapes to an off-screen &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API" rel="noopener noreferrer"&gt;HTML canvas&lt;/a&gt;, then reads the pixel data back and hashes it. Because the result depends on the GPU, the graphics driver, the operating system's font rendering, and anti-aliasing, two devices almost never produce the same hash. It is one of the most reliable techniques because the user cannot easily change how their hardware renders, which is why &lt;a href="https://shieldlabs.ai/blog/what-is-canvas-fingerprinting" rel="noopener noreferrer"&gt;canvas fingerprinting&lt;/a&gt; carries so much weight in a combined read.&lt;/p&gt;

&lt;h3&gt;
  
  
  WebGL fingerprinting
&lt;/h3&gt;

&lt;p&gt;WebGL fingerprinting is the 3D cousin of canvas. A script renders a scene through the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API" rel="noopener noreferrer"&gt;WebGL API&lt;/a&gt; and reads back both the rendered output and the reported GPU vendor and renderer strings. By exposing the graphics hardware directly, &lt;a href="https://shieldlabs.ai/blog/what-is-webgl-fingerprinting" rel="noopener noreferrer"&gt;WebGL fingerprinting&lt;/a&gt; stays stable per device and is hard to spoof convincingly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Audio fingerprinting
&lt;/h3&gt;

&lt;p&gt;Audio fingerprinting uses the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API" rel="noopener noreferrer"&gt;Web Audio API&lt;/a&gt; to generate a sound signal, process it through the device's audio stack, and measure the output. The tiny variations introduced by the hardware and the audio processing produce a stable value that differs between devices, even when nothing is actually played out loud. This kind of &lt;a href="https://shieldlabs.ai/blog/what-is-audio-fingerprinting" rel="noopener noreferrer"&gt;audio fingerprinting&lt;/a&gt; is a different thing from the music recognition that shares the name.&lt;/p&gt;

&lt;h3&gt;
  
  
  TLS fingerprinting (JA3/JA4)
&lt;/h3&gt;

&lt;p&gt;TLS fingerprinting reads the connection itself rather than anything in the page. When a browser opens an encrypted connection, the order and contents of the TLS handshake it sends are characteristic of the client software. Methods like &lt;a href="https://github.com/FoxIO-LLC/ja4" rel="noopener noreferrer"&gt;JA3 and the newer JA4&lt;/a&gt; summarize that handshake into a value, which is powerful because it is sent over the network and a page script cannot rewrite it. It is the technique that most often catches a browser lying about what it is, and the &lt;a href="https://shieldlabs.ai/blog/ja4-fingerprinting" rel="noopener noreferrer"&gt;JA4 fingerprint&lt;/a&gt; is how that handshake becomes a value you can compare.&lt;/p&gt;

&lt;p&gt;To see how far that goes, run browsers configured to spoof their identity through a combined read, and the TLS handshake is the layer that gives them away most reliably. A profile can rewrite its user agent in seconds, but the handshake it actually negotiates still matches the client software underneath, so the declared browser and the connection stop agreeing. JA4, released in 2023, made that handshake easier to reduce to a single comparable value, which is why a contradiction between it and the declared user agent is such a dependable tell.&lt;/p&gt;

&lt;h3&gt;
  
  
  WebRTC
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://shieldlabs.ai/blog/what-is-webrtc-fingerprinting" rel="noopener noreferrer"&gt;WebRTC&lt;/a&gt; is a browser feature for real-time audio and video, and while setting up a connection it can reveal a local network address, and sometimes the real public one, even when the visitor sits behind a VPN or proxy. That makes it less a source of device distinguishing detail and more a way to notice a connection that is hiding its origin. It is why WebRTC matters more for anonymity detection, surfacing a real address that contradicts the declared one, than for telling two ordinary devices apart.&lt;/p&gt;

&lt;h3&gt;
  
  
  Font fingerprinting
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://shieldlabs.ai/blog/what-is-font-fingerprinting" rel="noopener noreferrer"&gt;Font fingerprinting&lt;/a&gt; detects which fonts are installed by measuring how sample text renders, since a missing font falls back to a default with different dimensions. The set of installed fonts reflects the operating system and the software a person has added, which makes it a useful medium-stability signal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hardware and device attributes
&lt;/h3&gt;

&lt;p&gt;A browser also exposes hardware hints: the number of logical CPU cores, an approximate amount of device memory, the maximum number of simultaneous touch points, and, with permission, motion and orientation sensors. The set of supported browser features and APIs adds a few more bits the same way. Older techniques read the battery level and charging state too, though browsers have since restricted that one specifically because it was being used to track people. None is unique alone, but together they add distinguishing detail and tend to stay constant for a given device.&lt;/p&gt;

&lt;h3&gt;
  
  
  Media device fingerprinting
&lt;/h3&gt;

&lt;p&gt;Media device fingerprinting reads the list of media inputs and outputs the browser reports through the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/enumerateDevices" rel="noopener noreferrer"&gt;media devices API&lt;/a&gt;: the microphones, cameras, and audio outputs attached to the machine. It captures nothing from them, only how many are connected and of what kind. The full list, with each device's label and ID, is only exposed once the visitor has granted camera or microphone access, so on its own this technique is a weak, supporting signal rather than a primary one. Where it does apply, the set of devices stays fairly consistent for a given machine and is awkward to fake convincingly across a fleet of fake profiles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Screen, timezone, and language
&lt;/h3&gt;

&lt;p&gt;Screen resolution and color depth, the timezone offset, and the language and locale are all read directly. They are moderately stable and useful mostly as corroboration, and a mismatch between them, a timezone that disagrees with the declared locale, is itself a tell.&lt;/p&gt;

&lt;h3&gt;
  
  
  User agent and client hints
&lt;/h3&gt;

&lt;p&gt;The user agent string and the newer &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Client_hints" rel="noopener noreferrer"&gt;client hints&lt;/a&gt; report the browser, its version, and the operating system. They are the easiest attributes to spoof, so on their own they add almost no distinguishing detail, but when they disagree with what the render and TLS techniques reveal, that disagreement is a detection signal.&lt;/p&gt;

&lt;h2&gt;
  
  
  How unique and stable is a fingerprint?
&lt;/h2&gt;

&lt;p&gt;A fingerprint's strength comes from distinguishing detail: how much each attribute narrows the field of possible devices. &lt;a href="https://coveryourtracks.eff.org/static/browser-uniqueness.pdf" rel="noopener noreferrer"&gt;The EFF's early research&lt;/a&gt; found most browsers were unique within its sample. In 2018, &lt;a href="https://doi.org/10.1145/3178876.3186097" rel="noopener noreferrer"&gt;a study of around two million fingerprints&lt;/a&gt;, published in the Web Conference proceedings, found only about 33 percent were unique, because common phone models share very similar fingerprints. The practical reality sits in between: on desktop, a full fingerprint is usually distinctive; on mobile, it is weaker on its own and leans more on the network and behavioral layers.&lt;/p&gt;

&lt;p&gt;Stability is the other half. Fingerprints drift as browsers update, drivers change, and fonts are added, so a resilient system does not expect an exact match every time. It scores how much of the fingerprint agrees and tolerates small changes, which is also what separates a returning real user from an assembled profile that is too clean or internally contradictory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can browser fingerprinting be blocked?
&lt;/h2&gt;

&lt;p&gt;Browser fingerprinting can be resisted but not fully blocked, and the trade-offs are real. Privacy browsers and extensions add noise to canvas and audio readings, block known scripts, or make a device look like many others, and an anti-detect browser goes further by spoofing a full set of attributes per profile. Each of these changes some surfaces, but covering every technique consistently is hard, and the act of covering them, a too-uniform fingerprint, an injected-noise canvas that changes on every read, or a TLS handshake that disagrees with the declared browser, becomes its own signal. That cat-and-mouse plays out in full when a session runs an &lt;a href="https://shieldlabs.ai/blog/how-to-detect-anti-detect-browsers" rel="noopener noreferrer"&gt;anti-detect browser&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How browser fingerprinting works without a cookie
&lt;/h2&gt;

&lt;p&gt;Browser fingerprinting works without a cookie, and that is the point. A cookie is a value the site writes into the browser, so the visitor can clear it, switch to a private window, or move to a fresh browser and the link is gone. A browser fingerprint is not written anywhere; it is derived on the fly from the attributes the techniques above read, so the same browser produces the same identifier on the next visit even after cookies are cleared. That is why it survives the resets a fresh email and a private window are meant to provide.&lt;/p&gt;

&lt;p&gt;Fingerprinting does not replace cookies so much as complement them. A first-party cookie is a fast, reliable way to recognize a returning visitor who has not cleared anything, and the fingerprint is the layer underneath that still holds when the cookie is gone. Reading both together gives a steadier recognition than either one alone. That complement matters even though the third-party cookie did not disappear on the timeline many expected: in April 2025, &lt;a href="https://privacysandbox.google.com/blog/privacy-sandbox-next-steps" rel="noopener noreferrer"&gt;Google confirmed it would not phase out third-party cookies in Chrome&lt;/a&gt; after all, keeping its existing cookie-choice approach, so cookieless recognition is a resilient companion to cookies rather than a scramble to replace them.&lt;/p&gt;

&lt;h2&gt;
  
  
  How browser fingerprinting helps detect fraud
&lt;/h2&gt;

&lt;p&gt;Browser fingerprinting helps detect fraud because most online abuse depends on one person looking like many different people. Multi-accounting, free-trial farming, fake signups, and account takeover all rely on creating a fresh-looking visitor for each attempt, usually by clearing cookies, switching browsers, or rotating IPs. A browser fingerprint cuts through that, because the same device keeps producing the same identifier no matter how many fresh emails and new IPs sit on top of it. Linking those attempts back to one device is what turns a wall of separate-looking accounts into a recognizable pattern.&lt;/p&gt;

&lt;p&gt;The combination of techniques is also a fraud signal in its own right. A real browser produces attributes that agree with each other: the declared user agent matches what the render and TLS techniques reveal, the timezone fits the locale, the network looks like a residential connection. A tool built to fake a visitor has to keep all of those layers consistent at once, and the moment they can contradict each other, a TLS handshake that disagrees with the declared browser, a risk signal that surfaces a real address behind a VPN, that disagreement is the tell. So fingerprinting helps detect fraud two ways at once: it links repeat attempts to one device, and it flags the inconsistencies that mark an assembled identity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recognizing returning visitors with ShieldLabs
&lt;/h2&gt;

&lt;p&gt;ShieldLabs turns device and browser signals into a stable &lt;a href="https://shieldlabs.ai/products/device-intelligence" rel="noopener noreferrer"&gt;device identifier&lt;/a&gt; through one JavaScript snippet that recognizes a returning visitor even after cleared cookies and a rotated IP. The identifier is derived from the combination of signals, which is what makes it survive the resets a fresh email and a new IP are meant to provide, so your team can link repeat fraud and abuse attempts back to one device.&lt;/p&gt;

&lt;p&gt;Around that identifier, each visit returns a &lt;a href="https://shieldlabs.ai/products/risk-scoring" rel="noopener noreferrer"&gt;risk score&lt;/a&gt; from 0 to 100 with the named signals behind it, including the &lt;a href="https://shieldlabs.ai/products/anonymity-signals" rel="noopener noreferrer"&gt;risk signals&lt;/a&gt;, a VPN, anonymous proxy, datacenter connection, or &lt;a href="https://shieldlabs.ai/solutions/anti-detect-browser-detection" rel="noopener noreferrer"&gt;anti-detect browser&lt;/a&gt;, that surface when what a visitor presents and the underlying signals contradict each other. The &lt;a href="https://docs.shieldlabs.ai/api/overview" rel="noopener noreferrer"&gt;API and webhooks&lt;/a&gt; deliver the risk score and named risk signals, while four High-Risk Events, multi-accounting, account sharing, impossible travel and account takeover, are detected directly in the analytics dashboard, API and webhooks. Because the read happens in the background from data the browser already exposes, it adds no friction for a real visitor, and ShieldLabs helps block fraudulent and abusive traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Eckersley, Peter (Electronic Frontier Foundation): &lt;a href="https://coveryourtracks.eff.org/static/browser-uniqueness.pdf" rel="noopener noreferrer"&gt;How Unique Is Your Web Browser?&lt;/a&gt; (PETS, 2010)&lt;/li&gt;
&lt;li&gt;Wikipedia: &lt;a href="https://en.wikipedia.org/wiki/Device_fingerprint" rel="noopener noreferrer"&gt;Device fingerprint&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;MDN Web Docs: &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API" rel="noopener noreferrer"&gt;Canvas API&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Gómez-Boix, Laperdrix, Baudry: &lt;a href="https://doi.org/10.1145/3178876.3186097" rel="noopener noreferrer"&gt;Hiding in the Crowd: An Analysis of the Effectiveness of Browser Fingerprinting at Large Scale&lt;/a&gt; (WWW, 2018)&lt;/li&gt;
&lt;li&gt;Google: &lt;a href="https://privacysandbox.google.com/blog/privacy-sandbox-next-steps" rel="noopener noreferrer"&gt;The Privacy Sandbox: Next steps&lt;/a&gt; (2025)&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>privacy</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Free-trial abuse vs API-key abuse vs rate limiting: which layer stops what</title>
      <dc:creator>Yahor Papou</dc:creator>
      <pubDate>Wed, 16 Sep 2026 13:58:48 +0000</pubDate>
      <link>https://dev.to/shieldlabs/free-trial-abuse-vs-api-key-abuse-vs-rate-limiting-which-layer-stops-what-4g22</link>
      <guid>https://dev.to/shieldlabs/free-trial-abuse-vs-api-key-abuse-vs-rate-limiting-which-layer-stops-what-4g22</guid>
      <description>&lt;p&gt;A self-serve AI product gets a surprise five-figure compute bill, and the incident channel calls it "API abuse." Sometimes that is right. Often the real cause sits one layer upstream, at signup, where one person quietly farmed a hundred free-trial accounts and every one of them minted a valid key. In 2025, Stripe found that AI startups with self-serve sign-ups and direct API access saw &lt;a href="https://stripe.com/blog/analyzing-first-party-fraud-trends-account-free-trial-and-refund-abuse" rel="noopener noreferrer"&gt;10x more attempted abuse than enterprise AI solutions&lt;/a&gt;, and a lot of that pain comes from blaming the wrong layer. Free-trial abuse, API-key abuse, and rate limiting get treated as one thing. They are three problems, on three layers, with three owners, and the fix for one does almost nothing for the others.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free-trial abuse is an identity problem at signup: one user opening many accounts to claim free credits. You stop it before a key is ever issued.&lt;/li&gt;
&lt;li&gt;API-key abuse is a usage problem after a key exists: a key, often a leaked legitimate one, called at a volume or in a pattern it should not be.&lt;/li&gt;
&lt;li&gt;Rate limiting and spend caps are ceilings, not an identity check. They cap any single key, but they do not know that one person is behind a hundred of them.&lt;/li&gt;
&lt;li&gt;The layers complement each other. Identity scoring keeps farmed accounts from minting keys; gateway limits contain the damage of any key that slips through or leaks later.&lt;/li&gt;
&lt;li&gt;A CAPTCHA gates obvious bots at the form. It does not catch a human operator running many real-looking signups, and it is a different control from device-and-network identity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The three problems people blame for one bill
&lt;/h2&gt;

&lt;p&gt;These three get conflated because they all end in the same place, a bigger-than-expected bill or a degraded service, but they start in different places. Naming where each one starts is the whole game, because the cheapest fix lives at the layer where the problem begins, not where the symptom shows up.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free-trial abuse&lt;/strong&gt; starts at the &lt;strong&gt;signup&lt;/strong&gt; form, before any account or key exists. One user creates many accounts to claim the free credits each new account gets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API-key abuse&lt;/strong&gt; starts after a key is &lt;strong&gt;issued&lt;/strong&gt;: a valid key gets shared, leaked, or pointed at the API in a way it was never meant for.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting&lt;/strong&gt; is not a problem at all; it is the &lt;strong&gt;gateway&lt;/strong&gt; control that caps how hard any one key or org can hit you. It contains damage, but it does not identify who is behind the traffic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conflating them is how a team ends up with a gap: they tighten rate limits and rotate keys after a bad week, feel safer, and never notice that the farmed accounts minting those keys are still arriving at the front door untouched.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free-trial abuse vs API-key abuse vs rate limiting at a glance
&lt;/h2&gt;

&lt;p&gt;Here is the boundary in one view. Read down each column to see that these are genuinely different problems, not three names for one.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Free-trial (signup) abuse&lt;/th&gt;
&lt;th&gt;API-key abuse&lt;/th&gt;
&lt;th&gt;Rate limiting and spend caps&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;What it is&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;One user opens many accounts to claim free credits repeatedly&lt;/td&gt;
&lt;td&gt;A key, often a leaked or shared legitimate one, used at the wrong volume or pattern&lt;/td&gt;
&lt;td&gt;A ceiling on how many calls or how much spend any one key or org is allowed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;When it happens&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;At signup, before the account or key exists&lt;/td&gt;
&lt;td&gt;After a key is issued, during usage&lt;/td&gt;
&lt;td&gt;Continuously, as a guardrail on every key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;What is behind it&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A human (sometimes automated) farming identities; the device repeats while the email and IP rotate&lt;/td&gt;
&lt;td&gt;A leaked credential, a scraper, or a legitimate key pushed past its intent&lt;/td&gt;
&lt;td&gt;Nothing; it is your own enforcement, not an adversary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The layer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Signup identity&lt;/td&gt;
&lt;td&gt;Key usage&lt;/td&gt;
&lt;td&gt;Gateway&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Who owns the fix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Identity scoring at registration&lt;/td&gt;
&lt;td&gt;Key rotation, scoping, per-key monitoring&lt;/td&gt;
&lt;td&gt;Your API gateway or proxy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;What it costs you if missed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Compute burned across a hundred farmed accounts, plus polluted growth metrics&lt;/td&gt;
&lt;td&gt;A single key running away with your budget or exfiltrating data&lt;/td&gt;
&lt;td&gt;Without it, one key can drain the whole bill&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What is free-trial abuse?
&lt;/h2&gt;

&lt;p&gt;Free-trial abuse is one user creating many accounts to claim the same free offer more than once, scored and stopped at the registration before any credits or keys are provisioned. It hides because the user changes the surface details, a fresh email, a new IP, a cleared cookie, while the device and network behind the accounts repeat. An email check or an IP rule never sees that repetition; reading the device does.&lt;/p&gt;

&lt;p&gt;We measured this by rebuilding a signup the way a farmer does, rotating a new email, a fresh IP, and an emptied cookie on each pass, and the device underneath kept pointing at the same identifier every time. The surface details are meant to be disposable; the device is the part that repeats. That gap only widened in 2020, when Safari began blocking third-party cookies by default, leaving a cookie an even weaker anchor for a signup than the device beneath it.&lt;/p&gt;

&lt;p&gt;This is the only one of the three layers that is about &lt;em&gt;who&lt;/em&gt; is signing up rather than &lt;em&gt;what&lt;/em&gt; a key is doing. The advantage is timing: scoring the registration is far cheaper than chasing the compute after a hundred trials are already calling the model. The signals, the credit-gating, and the economics of &lt;a href="https://shieldlabs.ai/blog/how-to-prevent-free-trial-abuse-ai" rel="noopener noreferrer"&gt;how to prevent free-trial abuse at an AI company&lt;/a&gt; all turn on that timing; the point here is just where it sits: upstream of the key, at identity.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is API-key abuse?
&lt;/h2&gt;

&lt;p&gt;API-key abuse is a valid key being used at a volume, from a place, or in a pattern it was never meant for, and it lives entirely after the key is issued. The key might be a leaked secret committed to a public repo, a shared credential passed around a team, or a legitimate key repointed at scraping the model's output. Whatever the source, the control surface is the key itself, and the standard moves are the gateway's:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scope and rotate keys.&lt;/strong&gt; Short-lived, narrowly scoped keys limit the blast radius of any one that leaks. Broken authentication is one of the most common API risks for a reason, and it is squarely &lt;a href="https://owasp.org/API-Security/editions/2023/en/0x11-t10/" rel="noopener noreferrer"&gt;an API-security concern&lt;/a&gt;, not a signup one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-key spend caps.&lt;/strong&gt; A hard ceiling on spend per key and per org means no single credential, abused or not, can run away with your budget. The OWASP API Security Top 10 calls the missing version of this "unrestricted resource consumption."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anomaly monitoring on usage.&lt;/strong&gt; Watch for a key whose call volume, geography, or endpoint mix suddenly changes, the signature of a credential that has left its owner's hands.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this reads the human at the front door, and it does not need to. API-key abuse is downstream of identity. By the time a key exists, the farmed-account question was already answered, or missed, one layer up.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is rate limiting (and spend caps)?
&lt;/h2&gt;

&lt;p&gt;Rate limiting caps how many requests a key or org can make in a window, and spend caps cap how much it can cost; both are essential guardrails, and neither knows who is behind the traffic. They are about volume, not identity. A &lt;a href="https://en.wikipedia.org/wiki/Rate_limiting" rel="noopener noreferrer"&gt;rate limiter&lt;/a&gt; will happily throttle one key at a thousand requests a minute, which is exactly what you want when a single credential goes rogue.&lt;/p&gt;

&lt;p&gt;The gap is structural: a rate limit applies &lt;em&gt;per key&lt;/em&gt;. The free-trial farmer's whole technique is to spread the load across a hundred keys, each one comfortably under the limit. A hundred accounts each making polite, well-behaved calls is invisible to a per-key ceiling, because no individual key ever misbehaves. Spend caps have the same blind spot. They stop one key from draining the budget; they do nothing about a hundred keys each spending a small, allowed amount that sums to the same loss. Rate limiting contains the runaway-key problem and leaves the farmed-account problem completely open. That is not a flaw in rate limiting; it is just a different layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where CAPTCHA and bot-gating fit
&lt;/h2&gt;

&lt;p&gt;A CAPTCHA sits at the signup form and tries to separate humans from scripts, which makes it a bot control, not an identity one. It raises the cost of fully automated, headless signup floods, and for that narrow job it helps. Two things it does not do: it does not stop a human operator, or a lightly automated one driving a real browser, from completing many real-looking signups, and it does not tell you that two solved-CAPTCHA signups trace back to one machine. CAPTCHA asks "is this a bot?"; the identity layer asks "have we seen this device before?". They answer different questions, and a serious farming operation passes the first while failing the second.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which layer stops what: the honest map
&lt;/h2&gt;

&lt;p&gt;Put together, the picture is simple and the layers do not substitute for each other:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Signup identity&lt;/strong&gt; catches the farmed account &lt;em&gt;before&lt;/em&gt; a key is minted. It is the cheapest place to act, because nothing has been provisioned yet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key scoping, rotation, and monitoring&lt;/strong&gt; contain a key &lt;em&gt;after&lt;/em&gt; it exists, whether it was farmed past the identity layer or leaked later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits and spend caps&lt;/strong&gt; are the backstop that keeps any single key, abused or not, from running away with the bill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CAPTCHA&lt;/strong&gt; thins out crude automation at the form, and leaves the human-operated farm for the identity layer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A team that only hardens the gateway, more rate limits, tighter key scopes, is defending the second and third layers while the first stays open. A team that only scores signups stops the farm but still needs ceilings for the key that leaks next week. The two halves are complementary by design.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where ShieldLabs fits, and where it does not
&lt;/h2&gt;

&lt;p&gt;ShieldLabs reads exactly one of these layers: the signup-identity one. You add a JavaScript snippet to your signup or trial-activation page, and on the first visit it returns a &lt;a href="https://shieldlabs.ai/products/risk-scoring" rel="noopener noreferrer"&gt;risk score&lt;/a&gt; from 0 to 100 with the &lt;a href="https://shieldlabs.ai/products/anonymity-signals" rel="noopener noreferrer"&gt;risk signals&lt;/a&gt; and &lt;a href="https://shieldlabs.ai/products/device-intelligence" rel="noopener noreferrer"&gt;persistent identification&lt;/a&gt; behind it, before a single credit or key is provisioned. When a "new" signup traces back to a device you have already seen, that linkage is the farmed-account tell a fresh email is meant to hide.&lt;/p&gt;

&lt;p&gt;To be plain about scope: ShieldLabs scores the signup on a 0 to 100 risk score, names the risk signals that fired, and directly detects multi-accounting, so your team can keep farmed accounts from minting keys in the first place and the layer downstream has less to contain. Key usage monitoring, secret rotation, and spend-cap enforcement are your gateway's job, and they should stay there. You read the risk score and named risk signals through the &lt;a href="https://docs.shieldlabs.ai/api/overview" rel="noopener noreferrer"&gt;API and webhooks&lt;/a&gt; and decide, by your own rules, whether to gate credits, ask for a verification step, or let a clean signup through. It complements the gateway. The same identity layer carries into &lt;a href="https://shieldlabs.ai/solutions/new-account-fraud-prevention" rel="noopener noreferrer"&gt;new-account fraud prevention&lt;/a&gt; and &lt;a href="https://shieldlabs.ai/solutions/free-trial-abuse-prevention" rel="noopener noreferrer"&gt;free-trial abuse prevention&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to close the signup-identity gap?
&lt;/h2&gt;

&lt;p&gt;Install the ShieldLabs JavaScript snippet and risk-score every trial signup for linked accounts and risk signals in about five minutes, free for the first 5,000 identifications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shieldlabs.ai/pricing" rel="noopener noreferrer"&gt;Start Free&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://shieldlabs.ai/blog/free-trial-vs-api-key-abuse-vs-rate-limiting" rel="noopener noreferrer"&gt;ShieldLabs blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>api</category>
      <category>saas</category>
      <category>ai</category>
    </item>
    <item>
      <title>JA4 fingerprinting explained: how it improves on JA3, and what it actually identifies</title>
      <dc:creator>Yahor Papou</dc:creator>
      <pubDate>Tue, 15 Sep 2026 13:03:29 +0000</pubDate>
      <link>https://dev.to/egormajj/ja4-fingerprinting-explained-how-it-improves-on-ja3-and-what-it-actually-identifies-enh</link>
      <guid>https://dev.to/egormajj/ja4-fingerprinting-explained-how-it-improves-on-ja3-and-what-it-actually-identifies-enh</guid>
      <description>&lt;p&gt;JA4 fingerprinting identifies the software behind a connection, a browser, a script, or an automation tool, by reading the TLS Client Hello it sends and condensing that handshake into a short, readable string. It is FoxIO's 2023 successor to JA3, and it exists for one reason: JA3 stopped working. JA3, the old way of fingerprinting a TLS client, broke when the browsers it watched started shuffling their own handshake. After Chrome began randomizing the order of its TLS extensions in 2023, JA3, which hashed those extensions in the order they arrived, produced a different value on almost every connection, so the fingerprint that was supposed to recognize a client recognized nothing. JA4, released the same year by FoxIO, is the answer: it sorts the values instead of trusting their order, stays human-readable, and covers more than just TLS. This guide explains what JA4 is, how it improves on JA3, and the part most write-ups skip, what it actually identifies and what it does not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JA4 is a network fingerprint that identifies the software stack behind a connection, a browser, a script, or a tool, from the TLS Client Hello it sends, before any page code runs.&lt;/li&gt;
&lt;li&gt;It replaced JA3 because JA3 was order-sensitive: once browsers randomized their TLS extension order, JA3's hash changed on every connection. JA4 sorts the values, so reordering no longer breaks the match.&lt;/li&gt;
&lt;li&gt;A JA4 fingerprint is readable, not just a hash. Its parts spell out the TLS version, the cipher and extension makeup, and the application protocol, and JA4 is one of a family (JA4+) that also covers HTTP, TCP, and the server side.&lt;/li&gt;
&lt;li&gt;JA4 identifies a client type, not a person or a unique device. Everyone on the same browser and operating system can share one JA4, so it is a corroborating signal, never an identifier on its own.&lt;/li&gt;
&lt;li&gt;In fraud detection its value is the contradiction: a request that claims to be one browser but whose JA4 says it is a script or a tool is the tell, read at the network layer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is JA4 fingerprinting?
&lt;/h2&gt;

&lt;p&gt;JA4 fingerprinting is a method of identifying the software behind a connection by reading the TLS Client Hello, the first, unencrypted message a client sends when it opens a secure connection, and condensing its characteristics into a short, standardized string. Because different software, a Chrome browser, a Python script, a Go HTTP library, builds that handshake differently, the resulting JA4 string is characteristic of the client type that produced it. It is the successor to JA3, created by FoxIO, the firm founded by JA3's original author John Althouse, and published as an &lt;a href="https://github.com/FoxIO-LLC/ja4" rel="noopener noreferrer"&gt;open specification&lt;/a&gt;, and it sits at the network and transport layer rather than in the browser. It is the JA4 piece of &lt;a href="https://shieldlabs.ai/blog/what-is-tls-fingerprinting" rel="noopener noreferrer"&gt;TLS fingerprinting&lt;/a&gt; more broadly.&lt;/p&gt;

&lt;p&gt;The reason it reads the Client Hello is that this message is sent in the clear, before encryption begins, so a server can fingerprint the client without decrypting anything. What the fingerprint captures is configuration, the TLS version offered, the list of cipher suites, the extensions, and the application protocols, which together form a signature of the software, not the user.&lt;/p&gt;

&lt;h2&gt;
  
  
  How JA4 improves on JA3
&lt;/h2&gt;

&lt;p&gt;JA3, introduced in 2017 by John Althouse and colleagues at Salesforce, hashed the Client Hello fields in the exact order the client sent them and reduced the result to a single opaque value. That worked until the order stopped being stable. When browsers began permuting their TLS extensions on purpose, a change Chrome rolled out in 2023, the same browser produced a different JA3 on every connection, and the fingerprint collapsed. JA4 fixes this by sorting the values before it builds the fingerprint, so a harmless reordering produces the same JA4. It also keeps the fingerprint readable instead of hashing everything into one blob, and it extends beyond TLS into a whole family of fingerprints. The differences at a glance:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;JA3&lt;/th&gt;
&lt;th&gt;JA4&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Introduced&lt;/td&gt;
&lt;td&gt;2017&lt;/td&gt;
&lt;td&gt;2023&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;one opaque MD5 hash&lt;/td&gt;
&lt;td&gt;a readable, multi-part string&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extension order&lt;/td&gt;
&lt;td&gt;order-sensitive, breaks on reordering&lt;/td&gt;
&lt;td&gt;sorts the values, survives reordering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Readability&lt;/td&gt;
&lt;td&gt;none, just a hash&lt;/td&gt;
&lt;td&gt;parts you can read (TLS version, cipher and extension counts, ALPN)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scope&lt;/td&gt;
&lt;td&gt;the TLS client only&lt;/td&gt;
&lt;td&gt;a suite covering TLS, the server, HTTP, TCP, and more&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The practical upshot is resilience. JA3 was easy to defeat by accident, every browser that randomized its handshake broke it, and easy to defeat on purpose. JA4 raises the bar on both, which is why detection tooling moved to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The JA4 string format
&lt;/h2&gt;

&lt;p&gt;A JA4 fingerprint is written in readable parts, often shown as &lt;code&gt;a_b_c&lt;/code&gt;, in a compact multi-part shape (the two trailing hashes are 12 characters each, while the readable first part varies). Each part answers a different question:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Part a&lt;/strong&gt; captures the protocol and transport, the TLS version, whether the connection is over TCP or QUIC, the presence of a server name, and the application protocol negotiated via ALPN (Application-Layer Protocol Negotiation), so &lt;code&gt;t13&lt;/code&gt; reads as TLS 1.3.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Part b&lt;/strong&gt; summarizes the cipher suites the client offered, as a count plus a sorted hash, so reordering the same ciphers does not change it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Part c&lt;/strong&gt; does the same for the extensions and the signature algorithms.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A complete JA4 looks like &lt;code&gt;t13d1516h2_8daaf6152771_02713d6af862&lt;/code&gt;: the &lt;code&gt;t13d&lt;/code&gt; reads as TLS 1.3 over TCP with a server name present, the digits 1516 count the offered cipher suites (15) and extensions (16), &lt;code&gt;h2&lt;/code&gt; is the negotiated HTTP/2 preference, and the two trailing blocks are the sorted cipher and extension hashes. JA4 also ignores GREASE values, the deliberately random entries a browser adds to its handshake to keep the protocol extensible (&lt;a href="https://datatracker.ietf.org/doc/html/rfc8701" rel="noopener noreferrer"&gt;defined in RFC 8701&lt;/a&gt;), so that padding never shifts the fingerprint.&lt;/p&gt;

&lt;p&gt;Because the parts are separate and legible, an analyst can match on the whole string or on a single segment, and can read roughly what a client is from the fingerprint alone rather than looking it up in a table. Because a JA4 is readable and portable, common fingerprints are catalogued in open databases such as JA4DB and can be read directly in tools like Wireshark, so a value seen in your logs can be identified rather than reverse-engineered.&lt;/p&gt;

&lt;h2&gt;
  
  
  The JA4+ suite: more than TLS
&lt;/h2&gt;

&lt;p&gt;JA4 is the TLS-client member of a larger family called JA4+, a set of fingerprints for different layers of a connection. The ones that come up most:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JA4&lt;/strong&gt; fingerprints the TLS client from its Client Hello.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JA4S&lt;/strong&gt; fingerprints the server's response, the Server Hello.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JA4H&lt;/strong&gt; fingerprints the HTTP request, including the order of headers and the presence of things like an Accept-Language.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JA4T&lt;/strong&gt; fingerprints the TCP characteristics, such as window size, which can hint at the operating system or a proxy in the path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JA4X&lt;/strong&gt; fingerprints an X.509 certificate, and &lt;strong&gt;JA4SSH&lt;/strong&gt; covers SSH sessions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read together, the suite describes a connection from several angles at once, which is what makes a contradiction between layers, a TLS stack that does not match the HTTP behavior, so informative. Recent research pushes the same multi-layer idea further: a 2026 arXiv preprint, &lt;a href="https://arxiv.org/abs/2606.30119" rel="noopener noreferrer"&gt;On the Internet, Nobody Knows You're an LLM Bot&lt;/a&gt;, combines network, HTTP, and browser-level fingerprints to unmask automated web agents, exactly the kind of cross-layer read where a transport-layer fingerprint that disagrees with the browser above it becomes the tell.&lt;/p&gt;

&lt;h2&gt;
  
  
  What JA4 can and cannot tell you
&lt;/h2&gt;

&lt;p&gt;This is the part that matters most and is the easiest to get wrong. A JA4 fingerprint identifies a client's software stack, not a person and not a unique device. Everyone running the same browser version on the same operating system tends to produce the same JA4, so the fingerprint groups clients by type rather than singling anyone out. It is explicitly not designed to be unique, and there are real edge cases where it is not even stable for one client: Safari, for instance, can reuse a prior session through a TLS extension and present a different fingerprint on the next connection.&lt;/p&gt;

&lt;p&gt;That is not a flaw to hide; it is the right way to use the signal. JA4 tells you what kind of client is connecting, with high confidence and almost no cost, and it tells you that server-side before a single line of page code runs. What it does not do is tell you who the visitor is or pin them to one machine. Treated as a corroborating signal rather than an identifier, it is genuinely useful. Treated as a unique ID, it produces false matches and misses.&lt;/p&gt;

&lt;h2&gt;
  
  
  JA4 in fraud detection
&lt;/h2&gt;

&lt;p&gt;For threat hunters and &lt;a href="https://docs.aws.amazon.com/waf/latest/APIReference/API_JA4Fingerprint.html" rel="noopener noreferrer"&gt;web application firewalls&lt;/a&gt;, JA4 is mostly about grouping malicious traffic and rate-limiting clients that rotate IPs. For fraud and abuse detection the more useful read is narrower: the contradiction between what a client claims to be and what its JA4 says it is. A request can set a user-agent header that says Chrome on Windows, but the user-agent is just a string the client chooses, while the JA4 is produced by the actual TLS library underneath. When the header says one thing and the TLS stack says a scripting library or an automation framework, the mismatch is hard to fake and easy to read. A missing or unusual application protocol value, where a real browser would normally negotiate HTTP/2, points the same way. The reverse holds too: dedicated TLS-impersonation tools can forge a JA4 that matches a real browser, so a clean, matching fingerprint is not proof of a genuine client, only the absence of an obvious mismatch, which is one more reason to read JA4 as corroboration rather than identity.&lt;/p&gt;

&lt;p&gt;In testing, we ran requests that set a user-agent header claiming Chrome on Windows and the network layer disagreed: the TLS stack underneath matched a scripting library or automation framework, not the browser named in the header. The header is a string the client picks; the JA4 is produced by the library actually opening the connection, which is far harder to align. This gap became more useful in 2023, when Chrome began randomizing its TLS extension order and JA4's sorted, readable format kept the fingerprint stable through the change.&lt;/p&gt;

&lt;p&gt;That makes JA4 a strong corroborating signal for automated abuse and for &lt;a href="https://shieldlabs.ai/solutions/anti-detect-browser-detection" rel="noopener noreferrer"&gt;anti-detect browser&lt;/a&gt; setups, which spoof the browser-side fingerprint but often miss the transport layer underneath. It is read alongside the rest of the session rather than acted on alone, because a shared JA4 is normal: the goal is to catch the session whose layers disagree, not to treat a common fingerprint as guilt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Detecting spoofed clients with ShieldLabs
&lt;/h2&gt;

&lt;p&gt;ShieldLabs reads network signals as one input among many, never as a standalone verdict. The &lt;a href="https://shieldlabs.ai/products/network-intelligence" rel="noopener noreferrer"&gt;network signals&lt;/a&gt; behind a request are cross-checked against the declared browser, the &lt;a href="https://shieldlabs.ai/products/anonymity-signals" rel="noopener noreferrer"&gt;risk signals&lt;/a&gt; on the connection, and the rest of the session, so a client whose network layer disagrees with what it claims to be raises the read rather than passing on a header alone.&lt;/p&gt;

&lt;p&gt;ShieldLabs scores the session, the device, and the network, and names the signals behind a &lt;a href="https://shieldlabs.ai/products/risk-scoring" rel="noopener noreferrer"&gt;risk score&lt;/a&gt; from 0 to 100. You read that score and the named signals through the &lt;a href="https://docs.shieldlabs.ai/api/overview" rel="noopener noreferrer"&gt;API and webhooks&lt;/a&gt; and decide, by your own rules, what a contradiction is worth. The broader technique behind these signals is covered in &lt;a href="https://shieldlabs.ai/blog/what-is-tls-fingerprinting" rel="noopener noreferrer"&gt;TLS fingerprinting&lt;/a&gt; and the wider set of &lt;a href="https://shieldlabs.ai/blog/browser-fingerprinting-techniques" rel="noopener noreferrer"&gt;browser fingerprinting techniques&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;FoxIO: &lt;a href="https://github.com/FoxIO-LLC/ja4" rel="noopener noreferrer"&gt;JA4+ Network Fingerprinting specification&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Amazon Web Services: &lt;a href="https://docs.aws.amazon.com/waf/latest/APIReference/API_JA4Fingerprint.html" rel="noopener noreferrer"&gt;JA4Fingerprint (AWS WAF reference)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;IETF: &lt;a href="https://datatracker.ietf.org/doc/html/rfc8446" rel="noopener noreferrer"&gt;RFC 8446: The Transport Layer Security (TLS) Protocol Version 1.3&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;IETF: &lt;a href="https://datatracker.ietf.org/doc/html/rfc8701" rel="noopener noreferrer"&gt;RFC 8701: Applying GREASE to TLS Extensibility&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Fayolle, Bouhenniche, Pélissier, Laperdrix, Maurice, Rudametkin: &lt;a href="https://arxiv.org/abs/2606.30119" rel="noopener noreferrer"&gt;On the Internet, Nobody Knows You're an LLM Bot: Unmasking Web Agents with Multi-Layer Fingerprinting&lt;/a&gt; (arXiv preprint, 2026)&lt;/li&gt;
&lt;li&gt;Wikipedia: &lt;a href="https://en.wikipedia.org/wiki/Transport_Layer_Security" rel="noopener noreferrer"&gt;Transport Layer Security&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is a JA4 fingerprint?
&lt;/h3&gt;

&lt;p&gt;A JA4 fingerprint is a short, readable string that identifies the software stack behind a connection, derived from the TLS Client Hello a client sends when it opens a secure connection. Because a browser, a script, and a tool each build that handshake differently, the JA4 string is characteristic of the client type. It is created by FoxIO as the successor to JA3 and is written in a compact, multi-part format that a person can read directly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is JA4 better than JA3?
&lt;/h3&gt;

&lt;p&gt;For most purposes, yes. JA3 hashed the TLS Client Hello in the order the client sent it, so once browsers began randomizing their extension order, the same browser produced a different JA3 on every connection and the fingerprint stopped working. JA4 sorts the values before fingerprinting, so reordering does not break it, and it is human-readable and covers more protocols. JA3 still appears in older tooling, but JA4 is the more resilient successor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is a JA4 fingerprint unique?
&lt;/h3&gt;

&lt;p&gt;No. A JA4 fingerprint identifies a client's software stack, not an individual device or person, so everyone using the same browser version and operating system tends to share the same JA4. Some clients are not even stable across connections, for example Safari can present a different fingerprint when it reuses a prior TLS session. That is why JA4 is best used as a corroborating signal weighed with others, not as a unique identifier.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between JA3 and JA4?
&lt;/h3&gt;

&lt;p&gt;JA3 produces a single opaque hash of the TLS Client Hello in the order it arrived, which made it break when clients reordered their extensions. JA4 produces a readable, multi-part string and sorts the values so reordering does not change it, and it is part of the JA4+ family that also fingerprints HTTP, TCP, and the server side. In short, JA4 is more resilient, more readable, and broader in scope than JA3.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does ShieldLabs use network signals?
&lt;/h3&gt;

&lt;p&gt;ShieldLabs reads network signals as one input among many. They are cross-checked against the declared browser and the rest of the session and folded into a risk score, never acted on as a standalone verdict. ShieldLabs scores the session and hands the result to your own rules, and the free tier covers your first 5,000 identifications.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://shieldlabs.ai/blog/ja4-fingerprinting" rel="noopener noreferrer"&gt;ShieldLabs blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>networking</category>
      <category>webdev</category>
      <category>tls</category>
    </item>
    <item>
      <title>Residential proxy detection: why home IPs are the hardest to catch, and how detection actually works</title>
      <dc:creator>Yahor Papou</dc:creator>
      <pubDate>Tue, 15 Sep 2026 13:03:19 +0000</pubDate>
      <link>https://dev.to/egormajj/residential-proxy-detection-why-home-ips-are-the-hardest-to-catch-and-how-detection-actually-works-2269</link>
      <guid>https://dev.to/egormajj/residential-proxy-detection-why-home-ips-are-the-hardest-to-catch-and-how-detection-actually-works-2269</guid>
      <description>&lt;p&gt;A residential proxy hands an attacker a real home IP address, with a clean reputation, in the right city, that can change on every single request. Every defense built around the address itself, reputation lists, datacenter ranges, the old rule of one IP per account, quietly waves it through. That is what makes residential proxies the hardest masked traffic to catch, and it is also the clue to catching them: residential proxy detection is not an IP problem at all. This guide explains what a residential proxy is, where the home IPs actually come from, why IP-based checks miss them, and how detection works when the address is no help.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A residential proxy routes traffic through a real ISP-assigned home IP, so to a website it looks like an ordinary customer rather than an intermediary.&lt;/li&gt;
&lt;li&gt;The home IPs are sourced from real consumer devices, usually enrolled through bundled apps, bandwidth-sharing schemes, or compromised hardware, often without the owner paying attention.&lt;/li&gt;
&lt;li&gt;Because the address is a genuine home connection, IP reputation, blocklists, and ASN checks, the tools that catch datacenter proxies, mostly fail on residential ones.&lt;/li&gt;
&lt;li&gt;Detection works by reading everything except the address: rapid IP rotation, many accounts behind one home gateway, the device that stays the same as the IPs change, and network contradictions like a datacenter TLS stack or a leaked real IP.&lt;/li&gt;
&lt;li&gt;Residential proxies are the hardest case, so no single signal is reliable. Detection corroborates several, treats a contradiction as a risk signal rather than proof, and leaves the decision to you.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is a residential proxy?
&lt;/h2&gt;

&lt;p&gt;A residential proxy is an intermediary that routes a user's traffic through an IP address that a consumer Internet Service Provider assigned to a real home. Because the request arrives from a genuine household connection, the destination site sees the homeowner's ISP and location instead of the real visitor, so the traffic blends in as an ordinary customer. That is the whole appeal, and the whole problem.&lt;/p&gt;

&lt;p&gt;Residential proxies split into a few forms. Rotating proxies swap the exit IP on a timer or on every request, cycling through a large pool of home addresses. Static residential, sometimes sold as ISP proxies, keep one home IP for a longer stretch when an operation needs a consistent identity. They sit at one end of a spectrum: a datacenter proxy uses an obvious hosting address, a mobile proxy uses a carrier IP shared by many subscribers, and a residential proxy uses the hardest-to-question address of all, a real home. A VPN, by comparison, routes everyone through a shared set of provider IP ranges that are far easier to recognize, which is part of why residential proxies have become a preferred choice when an actor wants to stay invisible. Residential proxies are, in short, the hardest class of anonymous proxy to detect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where residential proxy IPs come from
&lt;/h2&gt;

&lt;p&gt;A residential proxy is only worth anything because its address belongs to a real household, so the networks selling them need a constant supply of real home connections to route through. In these networks, the exit node is rarely a server in a rack; it is someone's phone, laptop, or smart TV, enrolled through an app they installed for something else. That supply gets built in a few ways, most of them without the owner paying attention:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bundled SDKs in ordinary apps.&lt;/strong&gt; A normal-looking app, a game, a messenger, a screensaver, a "free" VPN, ships an embedded component that turns the device into an exit node in the background. Consent is usually buried in a privacy policy, and some of these run whether or not the screen is even on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bandwidth-sharing schemes.&lt;/strong&gt; Apps that openly pay people a few dollars to share unused bandwidth, which in practice rents out the home connection as an exit node for whoever buys the pool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compromised consumer hardware.&lt;/strong&gt; Routers, IP cameras, and smart TVs left on default passwords or outdated firmware get quietly enrolled into a relay network, the owner noticing nothing beyond an occasional slowdown.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two consequences follow. First, the address carries genuine residential reputation, because it is a genuine residence, which is exactly why blocking one is risky and why the household behind it has no idea it is being used. Second, the pools are cheap, rented, and resold, so the set of addresses you flagged last week is a different set this week. A measurement study characterizing residential proxies, &lt;a href="https://arxiv.org/abs/2412.03023" rel="noopener noreferrer"&gt;published on arXiv&lt;/a&gt;, describes exactly this churn, and it is why a static list never keeps up. Bitsight research in 2026 mapped more than 53 million unique residential-proxy exit IPs, with &lt;a href="https://www.bitsight.com/blog/residential-proxy-services-malware-ecosystems" rel="noopener noreferrer"&gt;many overlapping known malware infections&lt;/a&gt;, a reminder of how much of this supply comes from compromised consumer devices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why residential proxies are so hard to detect
&lt;/h2&gt;

&lt;p&gt;The methods that catch a datacenter proxy all lean on the address, and the address is the one thing a residential proxy gets right. A hosting range announces itself: its &lt;a href="https://en.wikipedia.org/wiki/Autonomous_system_%28Internet%29" rel="noopener noreferrer"&gt;autonomous system number&lt;/a&gt; belongs to a cloud provider, its &lt;a href="https://shieldlabs.ai/blog/what-is-ip-reputation" rel="noopener noreferrer"&gt;IP reputation&lt;/a&gt; is often already poor, and a blocklist can catch it. A residential exit defeats all three at once. The address belongs to a consumer ISP, so the ASN looks ordinary. It is a real home connection with no abuse history of its own, so its reputation is clean. And it rotates, so any list you build is stale before you finish it, and the old assumption that one IP means one person breaks completely.&lt;/p&gt;

&lt;p&gt;This is why a consumer-looking IP is not, by itself, a reason to trust a session, and why &lt;a href="https://shieldlabs.ai/solutions/proxy-vpn-detection" rel="noopener noreferrer"&gt;residential proxy detection&lt;/a&gt; cannot live on the network address. The address has stopped being evidence. Everything around it has to do the work instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  How residential proxy detection actually works
&lt;/h2&gt;

&lt;p&gt;Since the IP is honest, detection reads the behavior, the device, and the connection around it, and looks for the places where a routed session cannot keep its story straight. Four kinds of signal carry the load.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rotation and velocity.&lt;/strong&gt; A real home connection does not jump from one city or ISP to another between requests in the same session. A rotating residential proxy does exactly that, so an address that moves faster than a person physically could, or that changes networks mid-session, is a strong tell. This is the same logic behind &lt;a href="https://shieldlabs.ai/blog/how-to-detect-impossible-travel" rel="noopener noreferrer"&gt;impossible travel&lt;/a&gt;, read at the level of a single session.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connection density.&lt;/strong&gt; One home gateway serves one household. When many unrelated accounts or a burst of automated actions all originate from the same residential address at the same time, the address is no longer behaving like a home, it is behaving like an exit node.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Device linkage.&lt;/strong&gt; This is the one that matters most. The IPs scatter across a rotating pool, but the device behind them does not change. Reading the &lt;a href="https://shieldlabs.ai/products/device-intelligence" rel="noopener noreferrer"&gt;device&lt;/a&gt; rather than the address links the sessions the rotation was meant to separate, so a hundred fresh home IPs collapse back into the one machine driving them. When we tested traffic routed through rotating residential pools, this was the signal that held: the exit IP changed on nearly every request, but the device signature underneath stayed the same. The address rotates; the device does not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network contradictions.&lt;/strong&gt; The transport layer often disagrees with the residential story. A &lt;a href="https://shieldlabs.ai/blog/ja4-fingerprinting" rel="noopener noreferrer"&gt;TLS or JA4 fingerprint&lt;/a&gt; that matches a scripting library or a server stack, not a consumer browser, contradicts the home IP. Latency and round-trip timing can reveal the extra hop through an intermediary. And a &lt;a href="https://shieldlabs.ai/blog/what-is-webrtc-fingerprinting" rel="noopener noreferrer"&gt;WebRTC&lt;/a&gt; or DNS leak can expose the real datacenter address sitting behind the residential exit.&lt;/p&gt;

&lt;p&gt;The principle tying these together is simple: a residential proxy can fake the address but not everything attached to it. The contradiction between the clean home IP and the device, behavior, and connection around it is the signal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Residential vs datacenter proxy detection
&lt;/h2&gt;

&lt;p&gt;The two are not the same job, because the address is informative in one case and useless in the other:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Datacenter proxy&lt;/th&gt;
&lt;th&gt;Residential proxy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Address type&lt;/td&gt;
&lt;td&gt;Hosting or cloud range&lt;/td&gt;
&lt;td&gt;Real consumer ISP home IP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IP reputation&lt;/td&gt;
&lt;td&gt;Often already flagged&lt;/td&gt;
&lt;td&gt;Clean, belongs to a real home&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ASN / ownership&lt;/td&gt;
&lt;td&gt;Cloud provider, easy to spot&lt;/td&gt;
&lt;td&gt;Ordinary residential ISP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blocklists&lt;/td&gt;
&lt;td&gt;Reasonably effective&lt;/td&gt;
&lt;td&gt;Stale almost immediately&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What actually catches it&lt;/td&gt;
&lt;td&gt;The address itself&lt;/td&gt;
&lt;td&gt;The device, behavior, and connection around the address&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Datacenter proxy detection can lean on the network layer. Residential proxy detection has to corroborate everything else, which is why it is the harder problem and why an IP lookup alone never settles it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What residential proxy detection can and cannot do
&lt;/h2&gt;

&lt;p&gt;Residential proxies are the hardest masked traffic to identify, and honest detection says so. No single signal is reliable: a clean home IP proves nothing, a rotation can be coincidence, a device match can be a shared family computer, and a busy home IP is not always one household, because &lt;a href="https://datatracker.ietf.org/doc/html/rfc6598" rel="noopener noreferrer"&gt;carrier-grade NAT&lt;/a&gt; and large shared ranges can legitimately put many real users behind a single residential address. That is exactly why connection density has to raise the score rather than settle anything on its own. What works is corroboration, several weak-on-their-own signals pointing the same way, which is why good detection raises confidence toward, but never to, certainty. 99.9 percent is an honest ceiling; 100 percent is a sales claim.&lt;/p&gt;

&lt;p&gt;It also helps to remember that residential proxies have legitimate uses, such as ad verification and price-comparison research, so their presence is a risk signal tied to what the session is trying to do, not proof of fraud on its own. A residential proxy on an idle page view is noise. The same proxy on a tenth signup from one device this week, with a datacenter TLS stack underneath, is a story worth acting on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Detecting residential proxies with ShieldLabs
&lt;/h2&gt;

&lt;p&gt;ShieldLabs uses &lt;a href="https://shieldlabs.ai/products/device-intelligence" rel="noopener noreferrer"&gt;device intelligence&lt;/a&gt; together with &lt;a href="https://shieldlabs.ai/products/network-intelligence" rel="noopener noreferrer"&gt;connection analysis&lt;/a&gt; and pre-built blocklists, and flags the connection with an anonymous-proxy signal. But because residential proxies can be used for legitimate reasons, that signal has to be weighed together with the other risk signals, such as anti-detect browser usage, OS mismatch, timezone mismatch, and others. This layered approach helps your team move from spotting anomalies to confident, well-grounded decisions.&lt;/p&gt;

&lt;p&gt;The ShieldLabs analytics dashboard also surfaces the anomalies where many accounts trace back to one device or one account spreads across many devices, and assigns a risk score to each identified visitor. You get the risk score and named risk signals through the &lt;a href="https://docs.shieldlabs.ai/api/overview" rel="noopener noreferrer"&gt;API and webhooks&lt;/a&gt; to make accurate, well-grounded decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Stanford Secure Computer Systems Group: &lt;a href="https://www.scs.stanford.edu/26wi-cs244c/proj/residential_proxy.pdf" rel="noopener noreferrer"&gt;Residential Proxy Detection (RESIP research)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;arXiv: &lt;a href="https://arxiv.org/abs/2412.03023" rel="noopener noreferrer"&gt;Characterizing and Detecting Residential Proxies (2412.03023)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Wikipedia: &lt;a href="https://en.wikipedia.org/wiki/Proxy_server" rel="noopener noreferrer"&gt;Proxy server&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Wikipedia: &lt;a href="https://en.wikipedia.org/wiki/Autonomous_system_%28Internet%29" rel="noopener noreferrer"&gt;Autonomous system (Internet)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;MDN Web Docs: &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API" rel="noopener noreferrer"&gt;WebRTC API&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;IETF: &lt;a href="https://datatracker.ietf.org/doc/html/rfc6598" rel="noopener noreferrer"&gt;RFC 6598: IANA-Reserved IPv4 Prefix for Shared Address Space (carrier-grade NAT)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bitsight: &lt;a href="https://www.bitsight.com/blog/residential-proxy-services-malware-ecosystems" rel="noopener noreferrer"&gt;Residential proxy services and malware ecosystems&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can residential proxies be detected?
&lt;/h3&gt;

&lt;p&gt;Yes, but not by the IP address alone. Because a residential proxy uses a real home IP with a clean reputation, reputation lists, ASN checks, and blocklists mostly miss it. Detection instead reads the signals around the address: rapid IP rotation across locations, many accounts behind one home gateway, the device that stays the same while the IPs change, and network contradictions like a datacenter-style TLS stack or a leaked real IP. Residential proxies are harder to detect than datacenter proxies or VPNs, but they are not undetectable.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between a residential proxy and a datacenter proxy?
&lt;/h3&gt;

&lt;p&gt;A datacenter proxy routes traffic through a hosting or cloud IP address, which is easy to recognize because the address belongs to a known provider and often already carries a poor reputation. A residential proxy routes through a real home IP assigned by a consumer ISP, so it looks like an ordinary visitor and defeats address-based checks. The practical result is that datacenter proxies are caught by the address itself, while residential proxies have to be caught by the device, behavior, and connection around the address.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why do fraudsters use residential proxies?
&lt;/h3&gt;

&lt;p&gt;Because a residential IP carries the trust of a real home connection. It lets one actor look like many separate, legitimate customers, sidesteps reputation and blocklist checks, places the traffic in a plausible location, and rotates to break rate limits and the one-IP-per-account assumption. That combination is why residential proxies show up behind multi-accounting, account takeover, and offer abuse.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are residential proxies illegal?
&lt;/h3&gt;

&lt;p&gt;The proxies themselves are not illegal, and they have legitimate uses such as ad verification and market research. What can be illegal is the activity routed through them, such as fraud or unauthorized access, and the way some networks source their IPs, by enrolling people's devices without clear consent, raises its own problems. For a detection layer, a residential proxy is a risk signal tied to what the session is doing, not an offense in itself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does ShieldLabs detect residential proxies?
&lt;/h3&gt;

&lt;p&gt;ShieldLabs reads the device and connection behind a session rather than trusting the IP, so it links rotating residential IPs back to one device and weighs network contradictions like a mismatched TLS stack against the clean home address. Those signals feed a risk score from 0 to 100 with the reasons named. ShieldLabs scores the session and hands the result, through its API and webhooks, to the rules you build on top, and the free tier covers your first 5,000 identifications.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://shieldlabs.ai/blog/residential-proxy-detection" rel="noopener noreferrer"&gt;ShieldLabs blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>networking</category>
      <category>privacy</category>
    </item>
  </channel>
</rss>
