Fact-checked by Grok 2 weeks ago

History sniffing

History sniffing is a privacy-invasive web technique that allows websites to detect whether a has previously visited specific URLs by exploiting behaviors, such as distinct styling for visited links via CSS selectors like :visited. This relies on to dynamically create links, query their computed styles, and infer history from rendering differences, often without consent or awareness. The method emerged in the early as browsers implemented features to visually distinguish visited from unvisited links for , inadvertently creating a for cross-site tracking. Attackers could probe thousands of URLs—such as those of banks, sites, or political pages—to build detailed profiles, raising significant concerns for privacy and enabling targeted or advertising. Despite partial mitigations like rate-limiting CSS queries in major browsers since around , variants persisted through timing attacks, side-channels, and adaptive methods across platforms. Regulatory responses include U.S. actions against companies employing history sniffing for undisclosed tracking, emphasizing the need for transparency in data practices. Recent browser updates, such as Google's 136 in 2025, aim to fully block longstanding visited-link exploits, reflecting ongoing efforts to prioritize through rendering and stricter enforcement. These developments underscore history sniffing's evolution from a novel exploit to a persistent challenge in web , prompting both technical hardening and calls for standardized defenses.

Fundamentals

Definition and Mechanisms

History sniffing encompasses web-based attacks where a malicious detects whether a user has previously visited specific URLs, leveraging discrepancies in browser rendering of hyperlinks. This technique infers private browsing data by observing how s differentiate visited links—typically through altered styling like color changes from blue to —without requiring direct access to . The primary mechanism exploits the CSS :visited pseudo-class, which enables distinct styling rules for hyperlinks based on the user's history database. An attacker embeds target URLs as links on their page, applies CSS selectors like a:visited { outline-width: 100px; } to create detectable visual or layout shifts, and uses to probe computed styles via getComputedStyle(). If the link was visited, the browser applies the :visited styles, revealing the status through measurable properties, though modern browsers restrict queryable attributes to curb abuse. Evolved variants bypass restrictions via side-channel attacks, such as timing differences in rendering or resource loading for visited links, or leveraging APIs like for custom image generation tied to history state. These methods detect visitation indirectly: for instance, slower prefetching or distinct paint timings for cached (visited) resources allow across multiple probes. Empirical tests confirm detection rates exceeding 95% for popular sites in unmitigated environments.

Underpinning Browser Behaviors

browsers maintain a database to track URLs visited by users, typically stored in persistent formats such as files, enabling the differentiation of link styles across browsing sessions. When rendering anchor elements (<a> tags), the 's layout engine queries this database—often via an optimized history service—to flag links whose href attributes match recorded entries as visited. This check occurs during the computation of CSS styles, applying the :visited pseudo-class selector to alter properties like link color (e.g., defaulting to for visited links in many browsers, versus blue for unvisited) or outline, reflecting long-standing conventions for navigational cues. The :visited selector integrates into the browser's CSS cascade and specificity rules, where styles defined for it override or combine with base link styles if the visit condition holds. Browsers cache these visit states in memory for performance during page rendering to avoid repeated disk I/O queries, particularly on pages with numerous links. interfaces, such as window.getComputedStyle(), expose these applied styles through the (DOM), allowing scripts to probe element properties like color or outline-width post-layout. This exposure arises because computed styles reflect the final rendered state, including history-dependent selectors, without direct API restrictions on reading them until later mitigations. Additional behaviors amplify detectability: browsers may trigger partial re-renders or style recalculations on dynamic content changes, leaking visit status through timing differences or events via APIs like CSS Paint API in modern engines. History persistence survives browser restarts and, in some cases, modes are explicitly excluded, ensuring standard sessions retain full fidelity for consistency. These mechanisms, rooted in efficient rendering pipelines, inadvertently provide side channels for inferring user history without explicit permissions.

Historical Development

Early Discovery and Proofs-of-Concept

The capability to detect a user's browsing history via web technologies was first publicly demonstrated in , exploiting the CSS :visited pseudo-class, which browsers use to apply distinct styles to hyperlinks based on prior visitation. Early proofs-of-concept involved embedding numerous links on a webpage targeting sensitive URLs—such as those of financial institutions or adult sites—and using to query the computed styles of these elements, revealing differences in properties like color, outline width, or background images that only loaded for visited links. This side-channel leak allowed attackers to infer visitation with high accuracy, as browsers rendered :visited styles differently without exposing the history directly. These initial demonstrations relied on techniques such as measuring rendering timing variances or pixel-level differences in generated elements, enabling detection rates of up to several thousand URLs per second in unmitigated browsers like early versions of and . For instance, one common method applied oversized font sizes or invisible background images exclusively to :visited links, then used getComputedStyle() or image onload callbacks to detect application, effectively bypassing same-origin restrictions on access. Security researchers highlighted the privacy risks early, noting that such attacks could profile users for or without user interaction beyond page load. By mid-2000s, proofs-of-concept had evolved to include automated scripts scanning domain lists, demonstrating real-world feasibility against popular sites, though widespread exploitation remained limited due to performance overhead and lack of commercial incentive at the time. Jeremiah Grossman detailed a variant in , emphasizing JavaScript-CSS interplay for scalable detection, which underscored the technique's persistence despite growing awareness in the security community.

Notable Incidents and Research Milestones

In December 2010, researchers from the identified widespread commercial deployment of history sniffing techniques across dozens of websites, including .com, TwinCities.com, and .net, which exploited to detect visited links via styling differences. This empirical study revealed that such practices persisted despite the technique's known existence since at least 2002, when initial proofs-of-concept leveraged the CSS :visited selector to infer browsing history. A landmark 2011 IEEE Symposium on Security and Privacy paper, "I Still Know What You Visited Last Summer," demonstrated that automated defenses in browsers like Firefox and Chrome failed against interactive history sniffing variants, where attackers prompted user actions (e.g., hovering or clicking) to leak history via side channels; a user study with 307 participants confirmed detection rates exceeding 70% for targeted sites. In 2018, researchers from UC San Diego and Stanford University introduced four novel attacks at the Workshop on Offensive Technologies (WOOT), abusing modern features like hyperlink auditing (ping attribute), cache behaviors, and rendering optimizations to achieve sniffing rates of thousands of URLs per second across browsers including Chrome, Firefox, and Safari. Subsequent advancements included a 2020 ACM Conference on Computer and Communications Security paper by Sanchez-Rola et al., which proposed "BakingTimer," a server-side exploiting request processing delays to detect prior visits to over 50% of 10,000 tested websites without client-side scripting. Another 2020 NDSS contribution outlined an adaptive cross-platform method using dynamic parameter searches and auxiliary links to evade mitigations in browsers like and . In April 2025, announced a patch in version 136 to address a 23-year-old side-channel enabling history sniffing, underscoring ongoing persistence despite layered defenses.

Threat Model

Attack Vectors and Capabilities

History sniffing attacks primarily leverage the CSS :visited pseudo-class, which enables websites to apply distinct styles to hyperlinks based on whether the target URL appears in the user's browsing history. Attackers construct webpages containing numerous hyperlinks to suspected or target domains, then use methods like window.getComputedStyle() to query properties such as link colors or background colors that differ between visited and unvisited states. This allows automated detection without altering or requiring user interaction, as browsers historically permitted limited stylistic differences to preserve cues. Capabilities include probing thousands of URLs per second, enabling rapid inference of user interests, affiliations, or sensitive activities such as visits to , health resources, or political sites. For instance, researchers demonstrated rates of up to 3,000 URLs per second by exploiting residual :visited oracles in modern s, allowing attackers to categorize users for profiling or targeted exploitation. Advanced variants extend to interactive techniques, where user engagement—such as clicking or hovering—reveals through side-channel leaks not fully mitigated by style restrictions. Attack vectors often originate from third-party embeds like advertisements or widgets on legitimate sites, amplifying reach without direct control over the primary domain. Exploitation can infer membership in broad categories (e.g., banking customers) or specific visits, facilitating de-anonymization when combined with other data, though limits cross-site persistence. Empirical tests confirm detection accuracies exceeding 90% for targeted sets under controlled conditions, underscoring the technique's potency for invasion prior to comprehensive defenses.

Empirical Evidence of Exploitation

In 2010, researchers at the conducted the first large-scale empirical analysis of history sniffing, developing a detection tool to scan code for attempts to probe browser histories via visited link styling differences. This study examined the top websites and identified widespread deployment of such scripts, confirming that history sniffing was actively used in the wild to infer users' prior visits to specific domains without explicit consent. The tool flagged code from third-party trackers that systematically tested links to sensitive or competitive sites, enabling applications like based on inferred interests or monitoring visits to rival pages. Subsequent investigations revealed history sniffing's role in attacks, where attackers could detect visits to or providers to customize lures, increasing success rates by exploiting contextual knowledge of user behavior. For instance, by checking for visited links to bank domains, malicious sites could infer account ownership and tailor fraudulent prompts accordingly, demonstrating a direct causal link between the technique and heightened risk. These findings underscored the technique's practicality beyond proofs-of-concept, as it leveraged standard browser behaviors for stealthy reconnaissance. Even after early mitigations like CSS selector restrictions, empirical tests in showed residual vulnerabilities allowing attackers to leak browsing histories for up to 72 hours post-mitigation via timing-based probes on cached resources. Researchers demonstrated success rates exceeding 90% for detecting recent visits to targeted sites, with attacks completing in seconds across multiple browsers, highlighting ongoing exploitability in real-world scenarios. By , advanced variants enabled background scanning of the Top 100,000 websites in 30-40 seconds, reconstructing partial user profiles from visited links despite prior defenses. A 2020 analysis of extensions and web push implementations further evidenced exploitation vectors, where history sniffing complemented other tracking to evade cookie-based restrictions, affecting millions of users via popular sites. These cases illustrate history sniffing's deployment for persistent identification, often by ad networks, with detection rates in scans of top sites revealing thousands of vulnerable endpoints.

Browser Mitigations

Timeline of Patches and Standards

In March 2010, announced privacy enhancements to the CSS :visited pseudo-class in , restricting styles applicable to visited links to prevent probing of user browsing history via selectors like getComputedStyle() and combinators; these changes treated certain as unvisited and limited properties to color, background-color, and / colors. The updates landed in nightlies shortly after, with full integration in subsequent stable releases like , building on partial controls introduced in 3.5 via the layout.css.visited_links_enabled . Throughout 2010, other major browsers followed suit with analogous restrictions on :visited styles to curb history sniffing attacks demonstrated in prior research; for instance, and limited modifiable properties to color-related attributes, aligning with browser-enforced policies rather than a formal W3C mandate. These mitigations addressed vulnerabilities where could infer visit status by measuring style differences or timing, though they did not eliminate all side-channel risks. In April 2025, deployed partitioned :visited history in 136, using origin-specific keys to prevent cross-site leakage of link visit styles, closing a persistent 23-year-old side-channel that evaded earlier color-only limits. This update, previewed in experimental builds, extended protections against techniques exploiting unpartitioned history across contexts. No equivalent W3C standard update occurred, as restrictions remain implementation-specific to balance usability with .

Technical Countermeasures

Browsers implement restrictions on the CSS :visited pseudo-class to limit information leakage from visited links, confining stylistic differences to a narrow set of color-related properties that do not affect layout or trigger resource loads. These permitted properties include color, background-color, border-top-color, border-right-color, border-bottom-color, border-left-color, outline-color, column-rule-color, fill, and stroke, but only if both visited and unvisited states resolve to opaque colors without differing alpha channels via mechanisms like rgba() or transparent. Any attempt to apply other properties—such as dimensions, positioning, background images, or content generation—defaults to the unvisited link's computed value, thwarting attacks that exploit measurable differences in rendering size, timing, or external fetches. To further reduce side-channel risks, rendering engines process visited and unvisited links uniformly, minimizing computational timing variances that could be probed via high-volume queries. When interfaces like window.getComputedStyle() query link styles, browsers compute and return values assuming an unvisited state for restricted properties, ensuring no history-dependent data escapes even under scripted enumeration. These measures, first deployed in around March 2010, align with CSS Working Group recommendations to preserve (e.g., purple visited link colors) while blocking bulk history extraction. In April 2025, 136 introduced history partitioning for visited links, employing a triple-key hashing scheme incorporating the target link , top-level domain, and frame to compartmentalize history checks across contexts. This isolates cross-site inferences, rendering traditional :visited-based probes ineffective between distinct partitions, and complements property restrictions by enforcing origin-bound history resolution without altering core CSS semantics. Similar partitioning principles have been explored in other engines to address evolving vectors like nested frames or partitioned storage.

Modern Variants

Post-Mitigation Techniques

Following browser mitigations in the early that restricted CSS properties applicable to the :visited pseudo-class—limiting them primarily to color and background-color while ensuring identical dimensions for visited and unvisited links—attackers developed side-channel techniques exploiting rendering performance, timing differences, and residual style queries. These methods circumvented direct property distinctions by measuring computational costs or load behaviors indirectly. One category involves advanced CSS rendering attacks. Researchers in 2018 demonstrated techniques using CSS 3D transforms, where expensive transformations layered with :visited selectors cause measurable performance drops detectable via requestAnimationFrame timing; this affected , , , and , achieving detection rates for thousands of URLs per second. Similarly, SVG fill-coloring exploits complex SVG images tied to :visited rules, triggering costly re-paints whose durations reveal visit status across multiple browsers. Chrome-specific variants leveraged the CSS Paint API to hook into the rendering pipeline, toggling link URLs and timing re-paints for high-speed inference, patched via CVE-2018-6137. Cache-based probing emerged as another vector, relying on JavaScript to time resource loads or script executions. In , attackers probed the JavaScript bytecode cache by forcing re-execution of cross-origin scripts, where prior visits shortened load times due to shared caching, enabling history detection even after browser restarts. Broader timing attacks measured differences in page rendering or resource fetching speeds between cached (visited) and uncached states. Despite restrictions, direct style inspection persisted through JavaScript APIs like window.getComputedStyle, allowing sites to query computed colors of links and infer visited status from subtle differences browsers failed to fully mask. This 23-year-old vector, active as of 2025, exploited the :visited pseudo-class's role in styling links (e.g., purple for visited) and was finally addressed in 136 via partitioned history using a triple-key model (URL, top-level , frame origin) to prevent cross-site leaks. Such techniques highlight ongoing cat-and-mouse dynamics, with attackers adapting to incomplete mitigations through performance side-channels rather than overt property access.

Recent Developments (2018–2025)

In 2018, researchers at the , and published findings on four novel history sniffing attacks that exploited modern browser features, including , font loading, and resource timing APIs, achieving exfiltration rates of up to 3,000 URLs per second across , , and . These techniques bypassed existing mitigations by leveraging subtle differences in rendering and caching behaviors for visited versus unvisited links, demonstrating persistent vulnerabilities despite earlier stylesheet restrictions implemented in the mid-2010s. A 2020 study introduced BakingTimer, a server-side history sniffing that infers cache status by measuring variances in server request processing times for resources potentially cached from prior visits, effective even under strict defenses like those partitioning styles. This approach shifted focus from pure probes to hybrid timing attacks, highlighting how server logs could indirectly reveal browsing history without direct access to states, though it required attacker control over the probed domains. In April 2025, released 136, implementing triple-key partitioning for visited link styles to mitigate a 23-year-old side-channel , ensuring that style computations for history detection are isolated per site and top-level origin, thereby preventing cross-site sniffing via CSS selectors. This update addressed lingering exploits reliant on shared style keys across frames, a technique viable in prior versions despite partial fixes, and was rolled out without reported exploitation in the wild during the interim period. No equivalent comprehensive updates were announced for other major browsers in this timeframe, though ongoing privacy enhancements like stricter cache partitioning in and indirectly bolstered defenses.

Controversies and Impacts

Privacy Gains Versus Functional Costs

Browser mitigations against history sniffing, primarily through CSS :visited selector restrictions implemented between 2009 and 2011, yield substantial gains by curtailing cross-domain detection of visit histories. These changes limit applicable styles to non-measurable like color and background-color, blocking timing attacks, dimension probes, and JavaScript-assisted that previously enabled success rates of over 90% in detecting visits to specific URLs, such as those revealing sensitive topics like or political sites. Prior to these patches, empirical tests showed at least 76% of users vulnerable, with users exceeding 94%, underscoring the prevalence of exploitable leaks in unmitigated environments. These privacy protections, however, entail functional costs to web navigation and user experience. The core mechanism—distinguishing visited from unvisited links via visual cues like purple versus blue hues—facilitates efficient browsing by signaling explored content, preventing redundant revisits and reducing disorientation on dense pages with numerous hyperlinks. Disabling reliable cross-site differentiation leads users to "move in circles," as observed in usability studies where identical link appearances confuse path tracking, particularly for returning visitors scanning for new material. This compromise affects information foraging, where empirical guidelines emphasize maintaining visited styling conventions to avoid severe usability issues, such as increased task completion times and error rates in link-heavy interfaces. Web developers incur additional burdens, as restricted :visited rules hinder contextual enhancements like site-specific progress indicators, prompting reliance on client-side storage or server-side tracking—alternatives that introduce performance overheads or reintroduce risks if not partitioned carefully. While intra-domain styling persists unaffected, the net loss of universal visual feedback prioritizes aggregate over individualized , a browser engineers justified by deeming sniffing risks to outweigh styling benefits, though recent discussions advocate partitioned or encrypted approaches to restore functionality without leaks. No large-scale post-mitigation studies quantify the precise decrement, but foundational human-computer interaction research affirms the navigational value of link state persistence.

Broader Implications for Web Innovation

Browser mitigations against history sniffing, implemented starting with Firefox 3.0 in 2008, restricted the CSS :visited pseudo-class to applying only specific properties like color and background-color, preventing the use of layout-altering styles such as border or outline that could reveal visit status through timing or rendering differences. These changes, adopted across major browsers including Chrome by 2010, curtailed web developers' ability to leverage visited link styling for enhanced user interfaces, such as distinctive visual cues beyond mere color shifts that aid navigation and reduce cognitive load in dense link lists. The restrictions fostered a favoring over granular stylistic control, compelling designers to innovate alternatives like persistent elements (e.g., breadcrumbs or local session storage) for tracking user progress within sites, though these introduce their own risks if not isolated. This evolution in CSS capabilities underscored a broader paradigm in web standards, where empirical evidence of exploitation—such as early attacks detecting visits to thousands of URLs via stylesheet queries—prioritized causal prevention of cross-site inference over feature richness, influencing W3C discussions on privacy-preserving selectors. Recent proposals, including partitioned visited link in experimental implementations as of 2025, aim to restore limited functionality by scoping data to site origins, potentially enabling renewed innovation in history-aware designs without global leakage, though adoption remains pending due to compatibility concerns. Such developments highlight ongoing tensions: while mitigations demonstrably reduced sniffing feasibility, they imposed functional costs, evidenced by usability studies showing unstyled visited links increase user error rates in information foraging tasks by up to 20%.

References

  1. [1]
    What You Should Know About History Sniffing - Krebs on Security
    Dec 6, 2010 · History-sniffing code running on a Web page simply checks to see if your browser displays links to specific URLs as purple or blue.Missing: definition | Show results with:definition
  2. [2]
    [PDF] I Still Know What You Visited Last Summer: Leaking Browsing ...
    History sniffing attacks allow websites to learn about users' visits to other sites, using CSS and JavaScript to inspect page rendering and test URLs.Missing: explanation | Show results with:explanation
  3. [3]
    [PDF] Browser history re:visited - UCSD CSE
    Jul 22, 2018 · We describe two such history sniffing attacks below. Visited-link attacks Browsers let developers style links. according to history data: a ...Missing: definition | Show results with:definition<|separator|>
  4. [4]
    These New Techniques Expose Your Browsing History to Hackers
    Oct 31, 2018 · “History sniffing”: smelling out your trail across the web​​ The more the phisher can learn about their potential victim, the more likely the con ...Missing: definition | Show results with:definition
  5. [5]
    Browser history sniffing is still a thing - gHacks Tech News
    Nov 4, 2018 · Attacks that attempt to find out which sites a user visited are not anything new.Missing: definition | Show results with:definition
  6. [6]
    [PDF] An Adaptive Method for Cross-Platform Browser History Sniffing
    Feb 23, 2020 · Browsers store a user's browsing history, which can reveal the user's gender, behavior, location, even who they are in the real world. [15].Missing: explanation | Show results with:explanation
  7. [7]
    FTC "Browser Sniffing" Case Could Mandate Disclosure of ...
    Dec 13, 2012 · History sniffers abuse this functionality, by querying browser history for tens of thousands of URLs that the site has no intention of rendering ...Missing: explanation | Show results with:explanation
  8. [8]
    Chrome preps fix for browser history spying - The Register
    Apr 7, 2025 · The privacy attack, referred to as browser history sniffing, involves reading the color values of web links on a page to see if the linked pages ...
  9. [9]
    Google patches longstanding privacy issue in Chrome - Field Effect
    Apr 14, 2025 · Google addresses longstanding privacy issue in Chrome that allowed websites to detect users' browsing history.
  10. [10]
    Safeguarding your browsing history | Kaspersky official blog
    May 7, 2025 · Targeted checks. A history-sniffing site could, for example, run through all the websites of the major banks to determine which one you use.Missing: explanation | Show results with:explanation
  11. [11]
    :visited | Codrops
    Dec 11, 2016 · The :visited pseudo-class can, along with some scripting, be used by websites to attack and “sniff” a user's web browsing history.
  12. [12]
    Exploiting CSS Timing Side-Channels with requestAnimationFrame
    Dec 10, 2024 · This proof of concept demonstrates timing-based history sniffing attack that can detect which websites a user has previously visited, and ...
  13. [13]
    Privacy and the :visited selector - CSS - MDN Web Docs
    Jul 14, 2025 · The CSS :visited selector was a privacy and security risk. With a little bit of JavaScript, websites could uncover a user's browsing history.
  14. [14]
    [PDF] An Empirical Study of Privacy-Violating Information Flows in ...
    The possibility of history sniffing was first raised in the academic community a decade ago [9]. The original form of history sniffing used timing ...
  15. [15]
    Preventing attacks on a user's history through CSS :visited selectors
    It makes certain CSS selectors act as though links are always unvisited, even when they are visited. This happens in two cases. The first is sibling selectors ( ...Missing: sniffing | Show results with:sniffing
  16. [16]
    CSS History Leak or “I know where you've been” (Edge)
    The classic trick originally discovered by Jeremiah Grossman back in 2006, where you could find out which sites were visited by the user.
  17. [17]
    Popular Websites Sniff Browser History, Researchers Find - eWeek
    Dec 6, 2010 · “Honestly, we didn't know what to expect, as history sniffing is an old problem-known since at least 2002-and there has been lots of academic ...Missing: demonstration | Show results with:demonstration
  18. [18]
    Cookies from the Past: Timing Server-side Request Processing ...
    Dec 22, 2020 · In fact, history sniffing techniques are capable of tracking the users' browsing history without relying on any specific code in a third-party ...Missing: key | Show results with:key
  19. [19]
    Google to Patch 23-years Old Chrome Vulnerability That Leaks ...
    Apr 8, 2025 · The technique, known as “browser history sniffing,” allows websites to detect which links a user has visited by analyzing how the browser ...
  20. [20]
    Your Web Surfing History is Accessible (without your Permission) via ...
    Dec 2, 2010 · The UC San Diego history-sniffing detection tool analyzes the JavaScript running on the page to identify and tag all instances where the browser ...
  21. [21]
    New research finds browser history vulnerable to JavaScript snooping
    Dec 5, 2010 · The researchers point out that the latest versions of some browsers – such as Firefox, Chrome and Safari – now block history sniffing, but ...Missing: concept | Show results with:concept<|separator|>
  22. [22]
    [PDF] Web Browser History Detection as a Real-World Privacy ...
    The detrimental effects of browser cache/history sniffing in the context of phishing attacks is described, and an approach that neutralizes the threat by ...
  23. [23]
    Web Browser History Detection as a Real-World Privacy Threat
    Aug 7, 2025 · History sniffing attacks allow web sites to learn about users' visits to other sites. The major browsers have recently adopted a defense ...
  24. [24]
    [PDF] Empirical Analysis of Web Push Implementations in the Wild
    History sniffing attacks, in which attack- ers cross-check a list of target websites against the user's browser to (partially) infer the user's browsing history ...
  25. [25]
    [PDF] Browser-Based Privacy-Invasive Attacks - UIC Indigo
    We demonstrate how one of the cornerstones of SW capabilities (that of pre-fetching and caching resources) can be misused for history sniffing attacks. We ...
  26. [26]
    privacy-related changes coming to CSS :visited - Mozilla Hacks
    Mar 31, 2010 · We're making changes to how :visited works in Firefox. We're not sure what release this will be part of yet and the fixes are still making their way through ...
  27. [27]
    Mozilla Plugs The CSS History Leak - gHacks Tech News
    Mar 31, 2010 · Mozilla has implemented a new security feature in the Firefox web browser that protects against leaks that reveal previously visited sites.
  28. [28]
    visited - CSS - MDN Web Docs - Mozilla
    Jul 14, 2025 · The :visited CSS pseudo-class applies once the link has been visited by the user. For privacy reasons, the styles that can be modified using this selector are ...Try it · Privacy restrictions · Examples
  29. [29]
    Making :visited more private | Blog - Chrome for Developers
    Apr 2, 2025 · Chrome uses :visited link partitioning, storing link URL, top-level site, and frame origin, to only show a link as visited if clicked from that ...What is :visited link partitioning? · What about links to other...
  30. [30]
  31. [31]
    Plugging the CSS History Leak - Mozilla Security Blog
    Mar 31, 2010 · History Sniffing​​ Links can look different on web sites based on whether or not you've visited the page they reference. You've probably seen ...
  32. [32]
    Hackers Exploit JavaScript & CSS Tricks to Steal Browsing History
    Apr 2, 2025 · Hackers have exploited this feature, using JavaScript and CSS techniques to deduce users' online habits, revealing a concerning loophole in digital privacy.
  33. [33]
    Browser history re:visited - USENIX
    We present four new history sniffing attacks. Our attacks fit into two classical categories—visited-link attacks and cache-based attacks—but abuse new, modern ...Missing: discovered | Show results with:discovered<|separator|>
  34. [34]
    Chrome 136 fixes 20-year browser history privacy risk
    Apr 13, 2025 · The upcoming release of Google Chrome, version number 136, will finally address the 20-year problem by implementing a triple-key partitioning of visited links.
  35. [35]
    Change the Color of Visited Links - NN/G
    May 2, 2004 · Summary: People get lost and move in circles when websites use the same link color for visited and new destinations.Missing: disabling | Show results with:disabling
  36. [36]
    Styling visited links - useful for visitors to know where they have been?
    Sep 11, 2016 · Further, empirical observations from user testing have identified several severe usability problems on sites that violate this convention.Should visited and unvisited links be of different color?Visited links: expectations and accessibility - UX Stack ExchangeMore results from ux.stackexchange.comMissing: disabling | Show results with:disabling
  37. [37]
    Getting around the restricted styling of visited links with javascript ...
    Oct 6, 2019 · The Problem: CSS for :visited links is restricted to a few select properties for security reasons. Is there a way to style these properties ...
  38. [38]
    The Design of Visited Links | niqwithq
    Oct 14, 2024 · Thanks to so-called "history sniffing", website makers were able to detect which websites a user had visited by exploiting CSS and JavaScript.
  39. [39]
    Why the :visited Pseudo-class is Strange - WebFX
    Modern browsers have severely restrained the CSS properties that developers can use in a style rule that uses the :visited link pseudo-class.Missing: limitations | Show results with:limitations
  40. [40]
    Does link color impact usability and conversions? - Cieden
    Jan 10, 2025 · Failing to change a visited link color risks user confusion, repeated mistakes, and abandonment, particularly for older users.Missing: selector restrictions
  41. [41]
    Why did browsers limit :visited selector? - css - Stack Overflow
    Mar 11, 2017 · Limiting the styles that can be applied to visited links prevents them from affecting the layout of unrelated elements in a way that can be ...Why doesn't this a:visited css style work?Why not :visited instead of a:visited for links? - cssMore results from stackoverflow.comMissing: impact restrictions
  42. [42]
    Fixing web browser history leaks - Lukasz Olejnik
    Apr 1, 2025 · A new solution has been proposed: partitioning visited link history. This approach fundamentally changes how browsers store and expose visited link data.