{"id":53380,"date":"2025-05-07T08:17:05","date_gmt":"2025-05-07T12:17:05","guid":{"rendered":"https:\/\/www.kaspersky.com\/blog\/?p=53380"},"modified":"2025-05-07T08:17:05","modified_gmt":"2025-05-07T12:17:05","slug":"visited-links-privacy-protection","status":"publish","type":"post","link":"https:\/\/www.kaspersky.com\/blog\/visited-links-privacy-protection\/53380\/","title":{"rendered":"Turning purple: how visited links threaten your privacy"},"content":{"rendered":"<p>In April, the release of version 136 of Google Chrome finally addressed a privacy issue for the browser that\u2019s been widely known about since 2002 (which issue, btw, is also present in all other major browsers). This was real bad news for unscrupulous marketers, who\u2019d been exploiting it wholesale for 15 years. From this menacing description, you might be surprised to learn that the threat is a familiar and seemingly harmless convenience: links that your browser highlights a different color after you visit them.<\/p>\n<h2>From a blue sky to purple rain<\/h2>\n<p>Changing the color of links to visited sites (by default from blue to purple) was first introduced 32 years ago in the NCSA Mosaic browser. After that, this user-friendly practice was adopted by almost all browsers in the 1990s. And it later became the standard for Cascading Style Sheets (CSS) \u2014 a language for adding stylization to web pages. Such recoloring occurs by default in all popular browsers today.<\/p>\n<p>However, as early as in <a href=\"https:\/\/lists.w3.org\/Archives\/Public\/www-style\/2002Feb\/0039.html\" target=\"_blank\" rel=\"nofollow noopener\">2002<\/a>, researchers noticed that this feature could be abused by placing hundreds or thousands of invisible links on a page and using JavaScript to detect which of them the browser renders as visited. In this way, a rogue site could partially uncover a user\u2019s browsing history.<\/p>\n<p>In 2010, researchers discovered that this technique was being used in the wild by some major sites to snoop on visitors \u2014 among which were YouPorn, TwinCities, and 480 other <a href=\"https:\/\/www.eweek.com\/security\/popular-websites-sniff-browser-history-researchers-find\" target=\"_blank\" rel=\"nofollow noopener\">sites then popular<\/a>. It was also found that platforms like <a href=\"https:\/\/ranjitjhala.github.io\/static\/an_empirical_study_of_privacy_violating_flows_in_javascript_web_applications.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Tealium and Beencounter<\/a> were offering history-sniffing services, while the advertising firm Interclick was implementing this technology for analytics, and even faced legal action. Although it won the lawsuit, the major browsers have since <a href=\"https:\/\/blog.mozilla.org\/security\/2010\/03\/31\/plugging-the-css-history-leak\/\" target=\"_blank\" rel=\"nofollow noopener\">modified their code for processing links<\/a> to make it impossible to read whether a link was visited or not.<\/p>\n<p>However, advances in web technologies created new workarounds for snooping on browsing history. A <a href=\"https:\/\/www.usenix.org\/system\/files\/conference\/woot18\/woot18-paper-smith.pdf\" target=\"_blank\" rel=\"nofollow noopener\">2018 study<\/a> described four new ways to check the state of links \u2014 two of which affected all tested browsers except the Tor Browser. One of the vulnerabilities \u2014 CVE-2018-6137 \u2014 made it possible to check visited sites at up to 3000 links per second. Meanwhile new, increasingly <a href=\"https:\/\/www.bleepingcomputer.com\/news\/security\/hot-pixels-attack-checks-cpu-temp-power-changes-to-steal-data\/\" target=\"_blank\" rel=\"nofollow noopener\">sophisticated attacks to extract browsing history<\/a> continue to appear.<\/p>\n<h2>Why history theft is dangerous<\/h2>\n<p>Exposing your browsing history, even partially, poses several threats to users.<\/p>\n<p><strong>Not-so-private life.<\/strong> Knowing what sites you visit (especially if it relates to medical treatment, political parties, dating\/gambling\/porn sites, and similar sensitive topics), attackers can weaponize this information against you. They can then tailor a scam or bait to your individual case \u2014 be it extortion, a fake charity, the promise of new medication, or something else.<\/p>\n<p><strong>Targeted checks.<\/strong> A history-sniffing site could, for example, run through all the websites of the major banks to determine which one you use. Such information can be of use to both cybercriminals (say, for creating a fake payment form to fool you) and legitimate companies (say, for seeing which competitors you\u2019ve looked at).<\/p>\n<p><strong>Profiling and deanonymization.<\/strong> We\u2019ve written many times about how advertising and analytics companies use cookies and fingerprinting to <a href=\"https:\/\/www.kaspersky.com\/blog\/rc3-fpmon-browser-fingerprinting\/38369\/\" target=\"_blank\" rel=\"noopener nofollow\">track user movements and clicks<\/a> across the web. Your browsing history serves as an effective fingerprint, especially when combined with other tracking technologies. If an analytics firm\u2019s site can see what other sites you visited and when, it essentially functions as a super-cookie.<\/p>\n<h2>Guarding against browser history theft<\/h2>\n<p>Basic protection appeared in 2010 almost simultaneously in the Gecko (<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/CSS_selectors\/Privacy_and_the_visited_selector\" target=\"_blank\" rel=\"nofollow noopener\">Firefox<\/a>) and WebKit (Chrome and Safari) browser engines. This guarded against using basic code to read the state of links.<\/p>\n<p>Around the same time, Firefox 3.5 introduced the option to completely disable the recoloring of visited links. In the Firefox-based Tor Browser, this option is enabled by default \u2014 but the option to save browsing history is disabled. This provides a robust defense against the whole class of attacks but sorely impacts convenience.<\/p>\n<p>Unless you sacrifice an element of comfort, however, <a href=\"https:\/\/ronmasas.com\/posts\/the-human-side-channel\" target=\"_blank\" rel=\"nofollow noopener\">sophisticated attacks<\/a> will still be able to sniff your browsing history.<\/p>\n<p>Attempts are underway at Google to significantly change the status quo: starting with version 136, Chrome will have <a href=\"https:\/\/developer.chrome.com\/blog\/visited-links?hl=en\" target=\"_blank\" rel=\"nofollow noopener\">visited link partitioning<\/a> enabled by default. In brief, it works like this: links are only recolored if they were clicked <em>from the current site<\/em>; and when attempting a check, a site can only \u201csee\u201d clicks originating from itself.<\/p>\n<p>The database of website visits (and clicked links) is maintained separately for each domain. For example, suppose <em>bank.com<\/em> embeds a widget showing information from <em>banksupport.com<\/em>, and this widget contains a link to <em>centralbank.com<\/em>. If you click the <em>centralbank.com<\/em> link, it will be marked as visited \u2014 but only within the <em>banksupport.com<\/em> widget displayed on <em>bank.com<\/em>. If the exact same <em>banksupport.com<\/em> widget appears on some other site, the <em>centralbank.com<\/em> link will appear as unvisited. Chrome\u2019s developers are so confident that partitioning is the long-awaited silver bullet that they\u2019re nurturing tentative <a href=\"https:\/\/github.com\/explainers-by-googlers\/Partitioning-visited-links-history\" target=\"_blank\" rel=\"nofollow noopener\">plans to switch off the 2010 mitigations<\/a>.<\/p>\n<h2>What about users?<\/h2>\n<p>If you don\u2019t use Chrome, which, incidentally has <a href=\"https:\/\/www.kaspersky.com\/blog\/best-private-browser-in-2025\/53200\/\" target=\"_blank\" rel=\"noopener nofollow\">plenty of other privacy issues<\/a>, you can take a few simple precautions to ward off the purple menace.<\/p>\n<ul>\n<li>Update your browser regularly to stay protected against newly discovered vulnerabilities.<\/li>\n<li>Use incognito or private browsing if you don\u2019t want others to know what sites you visit. But read <a href=\"https:\/\/www.kaspersky.com\/blog\/incognito-myth-how-private-browsing-works\/51408\/\" target=\"_blank\" rel=\"noopener nofollow\">this post<\/a> first \u2014 because private modes are no cure-all.<\/li>\n<li>Periodically <a href=\"https:\/\/www.kaspersky.com\/blog\/how-to-block-cookies-in-chrome-safari-firefox-edge\/43505\/\" target=\"_blank\" rel=\"noopener nofollow\">clear cookies and browsing history<\/a> in your browser.<\/li>\n<li>Disable the recoloring of visited links in the settings.<\/li>\n<li>Use tools to block trackers and spyware, such as Private Browsing in <a href=\"https:\/\/www.kaspersky.com\/premium?icid=gl_bb2023-kdplacehd_acq_ona_smm__onl_b2c_kdaily_lnk_sm-team___kprem___\" target=\"_blank\" rel=\"noopener nofollow\">Kaspersky Premium<\/a>, or a specialized browser extension.<\/li>\n<\/ul>\n<blockquote><p>To find out how else browsers can snoop on you, check these blogposts out:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.kaspersky.com\/blog\/best-private-browser-in-2025\/53200\/\" target=\"_blank\" rel=\"noopener nofollow\">Privacy under attack: nasty surprises in Chrome, Edge, and Firefox<\/a><\/li>\n<li><a href=\"https:\/\/www.kaspersky.com\/blog\/what-you-need-to-know-about-tor-browser-and-anonymity\/52549\/\" target=\"_blank\" rel=\"noopener nofollow\">Tor Browser and anonymity: what you need to know<\/a><\/li>\n<li><a href=\"https:\/\/www.kaspersky.com\/blog\/mozilla-privacy-preserving-attribution-explained\/51997\/\" target=\"_blank\" rel=\"noopener nofollow\">Privacy-Preserving Attribution technology by Mozilla<\/a><\/li>\n<li><a href=\"https:\/\/www.kaspersky.com\/blog\/google-privacy-sandbox-and-ad-topics-explained\/49154\/\" target=\"_blank\" rel=\"noopener nofollow\">What Google Ad Topics is, and how to disable it<\/a><\/li>\n<li><a href=\"https:\/\/www.kaspersky.com\/blog\/googerteller-sound-of-trackers\/51186\/\" target=\"_blank\" rel=\"noopener nofollow\">The sound of online trackers<\/a><\/li>\n<\/ul>\n<\/blockquote>\n<input type=\"hidden\" class=\"category_for_banner\" value=\"premium-generic\">\n","protected":false},"excerpt":{"rendered":"<p>Why highlighted links to visited sites can be dangerous, and why a solution was over 20 years in the making.<\/p>\n","protected":false},"author":2722,"featured_media":53384,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2683],"tags":[1278,16,4649,674,21,43,726,768,321,422,131,812],"class_list":{"0":"post-53380","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-threats","8":"tag-browsers","9":"tag-chrome","10":"tag-cookie","11":"tag-fingerprint","12":"tag-firefox","13":"tag-privacy","14":"tag-scam","15":"tag-surveillance","16":"tag-technology","17":"tag-threats","18":"tag-tips","19":"tag-tracking"},"hreflang":[{"hreflang":"x-default","url":"https:\/\/www.kaspersky.com\/blog\/visited-links-privacy-protection\/53380\/"},{"hreflang":"en-in","url":"https:\/\/www.kaspersky.co.in\/blog\/visited-links-privacy-protection\/28826\/"},{"hreflang":"en-ae","url":"https:\/\/me-en.kaspersky.com\/blog\/visited-links-privacy-protection\/24054\/"},{"hreflang":"ar","url":"https:\/\/me.kaspersky.com\/blog\/visited-links-privacy-protection\/12406\/"},{"hreflang":"en-gb","url":"https:\/\/www.kaspersky.co.uk\/blog\/visited-links-privacy-protection\/28933\/"},{"hreflang":"es-mx","url":"https:\/\/latam.kaspersky.com\/blog\/visited-links-privacy-protection\/28100\/"},{"hreflang":"es","url":"https:\/\/www.kaspersky.es\/blog\/visited-links-privacy-protection\/30937\/"},{"hreflang":"it","url":"https:\/\/www.kaspersky.it\/blog\/visited-links-privacy-protection\/29638\/"},{"hreflang":"ru","url":"https:\/\/www.kaspersky.ru\/blog\/visited-links-privacy-protection\/39494\/"},{"hreflang":"tr","url":"https:\/\/www.kaspersky.com.tr\/blog\/visited-links-privacy-protection\/13349\/"},{"hreflang":"fr","url":"https:\/\/www.kaspersky.fr\/blog\/visited-links-privacy-protection\/22772\/"},{"hreflang":"pt-br","url":"https:\/\/www.kaspersky.com.br\/blog\/visited-links-privacy-protection\/23703\/"},{"hreflang":"de","url":"https:\/\/www.kaspersky.de\/blog\/visited-links-privacy-protection\/32159\/"},{"hreflang":"ru-kz","url":"https:\/\/blog.kaspersky.kz\/visited-links-privacy-protection\/29104\/"},{"hreflang":"en-au","url":"https:\/\/www.kaspersky.com.au\/blog\/visited-links-privacy-protection\/34874\/"},{"hreflang":"en-za","url":"https:\/\/www.kaspersky.co.za\/blog\/visited-links-privacy-protection\/34507\/"}],"acf":[],"banners":"","maintag":{"url":"https:\/\/www.kaspersky.com\/blog\/tag\/privacy\/","name":"privacy"},"_links":{"self":[{"href":"https:\/\/www.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/53380","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaspersky.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaspersky.com\/blog\/wp-json\/wp\/v2\/users\/2722"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaspersky.com\/blog\/wp-json\/wp\/v2\/comments?post=53380"}],"version-history":[{"count":3,"href":"https:\/\/www.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/53380\/revisions"}],"predecessor-version":[{"id":53383,"href":"https:\/\/www.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/53380\/revisions\/53383"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.com\/blog\/wp-json\/wp\/v2\/media\/53384"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.com\/blog\/wp-json\/wp\/v2\/media?parent=53380"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.com\/blog\/wp-json\/wp\/v2\/categories?post=53380"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.com\/blog\/wp-json\/wp\/v2\/tags?post=53380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}