Why are all links in GD going through sovrn.co now? (Page 2 of 2)
|
Originally Posted By MongooseKY: I'm using TamperMonkey with the following script to eradicate sovrn, vigilink, and avantlink redirects across the board. I'm sick and tired of being monetized by having everything I click routed through third parties who aren't accountable for the crap they do. // ==UserScript== // @name Remove VigLink, AvantLink, and Sovrn Redirects // @namespace https://tampermonkey.net/ // @version 1.0 // @description Strip redirect wrappers from VigLink, AvantLink, and Sovrn links // @match *://*/* // @run-at document-end // @grant none // ==/UserScript== (function() { 'use strict'; const REDIRECT_DOMAINS = [ "viglink.com", "redirect.viglink.com", "avantlink.com", "www.avantlink.com", "sovrn.co", "redirect.sovrn.com" ]; const PARAM_CANDIDATES = [ "url", "u", "dest", "destination", "to", "afsrc", "redir", "r" ]; function extractRealUrl(href) { try { const parsed = new URL(href); // Check if this is a redirector domain if (!REDIRECT_DOMAINS.some(d => parsed.hostname.includes(d))) { return null; } // Try all known parameter names for (const p of PARAM_CANDIDATES) { let val = parsed.searchParams.get(p); if (val) { // Some redirectors double-encode URLs try { val = decodeURIComponent(val); } catch {} try { val = decodeURIComponent(val); } catch {} // Validate it's a real URL if (val.startsWith("http://") || val.startsWith("https://")) { return val; } } } return null; } catch (e) { console.error("Redirect fix error:", e); return null; } } function fixLink(a) { if (!a || !a.href) return; const real = extractRealUrl(a.href); if (real) { console.log("Rewriting URL: " + a.href + " as " + real); a.href = real; } } function scan() { document.querySelectorAll("a[href]").forEach(fixLink); } // Initial scan scan(); // Watch for dynamically added links const observer = new MutationObserver(mutations => { for (const m of mutations) { for (const node of m.addedNodes) { if (node.nodeType === 1) { if (node.tagName === "A") { fixLink(node); } else { node.querySelectorAll?.("a[href]").forEach(fixLink); } } } } }); observer.observe(document.body, { childList: true, subtree: true }); })(); I love how the domains in your script even got sovrn'd.
|
|
Originally Posted By laxman09: tagging by for easy fixes that dont require me to know how to code ![]() I noticed the redirects the other day and stopped clicking on links because it looks suspicious. Originally Posted By laxman09: tagging by for easy fixes that dont require me to know how to code ![]() I noticed the redirects the other day and stopped clicking on links because it looks suspicious. You don't need to code. Claude Code, free version, no subscription: I want to code a chrome extension I can add to Brave Browser for ar15.com to sanitize their affiliate links. When you post a link, they run it through a few different things to monetize it. Examples: Actual link: https://www.amazon.com/Chicken-Sea-Imitation-Crabmeat-Packet/dp/B0FH775YW6 Monetized link: https://www.amazon.com/dp/B0FH775YW6?tag=arfcom00-20 Actual link: https://yahoo.com Monetized link: https://sovrn.co/?key=41eb5962625ae87b4762e5bd8c88faf6&u=https%3A%2F%2Fwww%2Eyahoo%2Ecom%2F&cuid=52825 For both types of link monetization, I want the link when I click on it to take me to the actual link, not pass through the monetized link. |
|
Originally Posted By Dangus: I love how the domains in your script even got sovrn'd. ![]() |
01010111 | 57 | 127 | LXXXVII
Joined:
Jul 2023
Posts:
3686
EE: 0% (0)
|
Originally Posted By MongooseKY: I'm using TamperMonkey with the following script to eradicate sovrn, vigilink, and avantlink redirects across the board. I'm sick and tired of being monetized by having everything I click routed through third parties who aren't accountable for the crap they do. // ==UserScript== // @name Remove VigLink, AvantLink, and Sovrn Redirects // @namespace https://tampermonkey.net/ // @version 1.0 // @description Strip redirect wrappers from VigLink, AvantLink, and Sovrn links // @match *://*/* // @run-at document-end // @grant none // ==/UserScript== (function() { 'use strict'; const REDIRECT_DOMAINS = [ "viglink.com", "redirect.viglink.com", "avantlink.com", "www.avantlink.com", "sovrn.co", "redirect.sovrn.com" ]; const PARAM_CANDIDATES = [ "url", "u", "dest", "destination", "to", "afsrc", "redir", "r" ]; function extractRealUrl(href) { try { const parsed = new URL(href); // Check if this is a redirector domain if (!REDIRECT_DOMAINS.some(d => parsed.hostname.includes(d))) { return null; } // Try all known parameter names for (const p of PARAM_CANDIDATES) { let val = parsed.searchParams.get(p); if (val) { // Some redirectors double-encode URLs try { val = decodeURIComponent(val); } catch {} try { val = decodeURIComponent(val); } catch {} // Validate it's a real URL if (val.startsWith("http://") || val.startsWith("https://")) { return val; } } } return null; } catch (e) { console.error("Redirect fix error:", e); return null; } } function fixLink(a) { if (!a || !a.href) return; const real = extractRealUrl(a.href); if (real) { console.log("Rewriting URL: " + a.href + " as " + real); a.href = real; } } function scan() { document.querySelectorAll("a[href]").forEach(fixLink); } // Initial scan scan(); // Watch for dynamically added links const observer = new MutationObserver(mutations => { for (const m of mutations) { for (const node of m.addedNodes) { if (node.nodeType === 1) { if (node.tagName === "A") { fixLink(node); } else { node.querySelectorAll?.("a[href]").forEach(fixLink); } } } } }); observer.observe(document.body, { childList: true, subtree: true }); })(); This version retains the original script's simple purpose but makes it substantially safer and more reliable. Most importantly, it replaces the loose hostname.includes() test with strict domain/subdomain matching, so a domain such as viglink.com.malicious-site.com cannot be mistaken for VigLink. It also safely validates that extracted destinations are genuine http:// or https:// URLs, avoids unnecessarily decoding already-valid URLs, performs case-insensitive parameter matching, and can unwrap several nested affiliate redirects. In addition to scanning the page when it loads, it now watches both new links and existing links whose href is changed later by JavaScript, and it performs another check immediately when a link is clicked. It still uses @grant none, makes no external network requests, loads no outside code, and sends no information anywhere. The original script's basic behavior and scope are preserved while addressing the weaknesses I found in its domain matching, decoding, and dynamic-link handling. // ==UserScript== // @name Remove VigLink, AvantLink, and Sovrn Redirects // @namespace https://tampermonkey.net/ // @version 2.0 // @description Replace VigLink, AvantLink, and Sovrn affiliate redirect links with their direct destination URLs // @match *://*/* // @run-at document-end // @grant none // ==/UserScript== (function () { 'use strict'; /* * Redirect networks to remove. * * Matching is restricted to the actual domain or one of its subdomains. * Example: * redirect.viglink.com -> matches * viglink.com -> matches * viglink.com.evilsite.com -> does NOT match */ const REDIRECT_DOMAINS = [ 'viglink.com', 'avantlink.com', 'sovrn.com', 'sovrn.co' ]; /* * Common query-string parameters used to hold the real destination URL. */ const PARAM_CANDIDATES = new Set([ 'url', 'u', 'dest', 'destination', 'to', 'afsrc', 'redir', 'redirect', 'redirecturl', 'target', 'r' ]); /* * Set to true if you want rewritten links displayed in the browser console. */ const DEBUG = false; function log(...args) { if (DEBUG) { console.log('[Affiliate Redirect Remover]', ...args); } } /* * Strictly determine whether a hostname belongs to one of the * redirect networks. */ function isRedirectDomain(hostname) { if (!hostname) return false; const host = hostname.toLowerCase().replace(/\.$/, ''); return REDIRECT_DOMAINS.some(domain => host === domain || host.endsWith('.' + domain) ); } /* * Only permit normal HTTP/HTTPS destination URLs. */ function isValidHttpUrl(value) { if (!value || typeof value !== 'string') { return false; } try { const parsed = new URL(value); return parsed.protocol === 'http:' || parsed.protocol === 'https:'; } catch { return false; } } /* * URLSearchParams already performs one level of decoding. * * Only decode again when the current value is NOT already a valid URL. * This prevents legitimate encoded characters inside the destination URL * from being unnecessarily decoded. */ function normalizeDestination(value) { if (!value) return null; let candidate = value.trim(); if (isValidHttpUrl(candidate)) { return candidate; } for (let i = 0; i < 2; i++) { try { const decoded = decodeURIComponent(candidate); if (decoded === candidate) { break; } candidate = decoded; if (isValidHttpUrl(candidate)) { return candidate; } } catch { break; } } return null; } /* * Extract the real destination URL from one redirect wrapper. */ function extractDestination(href) { try { const parsed = new URL(href); if (!isRedirectDomain(parsed.hostname)) { return null; } /* * Parameter matching is case-insensitive. */ for (const [key, value] of parsed.searchParams.entries()) { if (!PARAM_CANDIDATES.has(key.toLowerCase())) { continue; } const destination = normalizeDestination(value); if (destination) { return destination; } } return null; } catch (error) { log('Unable to parse URL:', href, error); return null; } } /* * Unwrap multiple redirect layers if one affiliate redirect points * through another supported affiliate redirect. * * The depth limit prevents malformed links from creating a loop. */ function unwrapRedirect(href, maxDepth = 5) { let current = href; let changed = false; const seen = new Set(); for (let depth = 0; depth < maxDepth; depth++) { if (seen.has(current)) { break; } seen.add(current); const destination = extractDestination(current); if (!destination || destination === current) { break; } current = destination; changed = true; } return changed ? current : null; } /* * Rewrite an individual link. */ function fixLink(link) { if (!(link instanceof HTMLAnchorElement)) { return; } const href = link.href; if (!href) { return; } const directUrl = unwrapRedirect(href); if (directUrl && directUrl !== href) { log('Rewriting:', href, '->', directUrl); link.href = directUrl; } } /* * Scan all links currently present on the page. */ function scan(root = document) { if (!root?.querySelectorAll) { return; } root.querySelectorAll('a[href]').forEach(fixLink); } /* * Initial page scan. */ scan(); /* * Catch links immediately before the user interacts with them. * * This provides another layer of protection against sites that rewrite * links shortly before a click. */ function fixClickedLink(event) { const target = event.target; if (!(target instanceof Element)) { return; } const link = target.closest('a[href]'); if (link) { fixLink(link); } } document.addEventListener('pointerdown', fixClickedLink, true); document.addEventListener('click', fixClickedLink, true); /* * Watch for: * * 1. New links added dynamically. * 2. Existing links whose href attribute is changed after page load. */ const observer = new MutationObserver(mutations => { for (const mutation of mutations) { if ( mutation.type === 'attributes' && mutation.target instanceof HTMLAnchorElement ) { fixLink(mutation.target); continue; } if (mutation.type === 'childList') { for (const node of mutation.addedNodes) { if (!(node instanceof Element)) { continue; } if (node instanceof HTMLAnchorElement) { fixLink(node); } scan(node); } } } }); observer.observe(document.documentElement, { childList: true, subtree: true, attributes: true, attributeFilter: ['href'] }); })(); |
|
Originally Posted By Trump45: // ==UserScript== // @name Remove VigLink, AvantLink, and Sovrn Redirects // @namespace https://tampermonkey.net/ // @version 2.0 // @description Replace VigLink, AvantLink, and Sovrn affiliate redirect links with their direct destination URLs // @match *://*/* // @run-at document-end // @grant none // ==/UserScript== (function () { 'use strict'; /* * Redirect networks to remove. * * Matching is restricted to the actual domain or one of its subdomains. * Example: * redirect.viglink.com -> matches * viglink.com -> matches * viglink.com.evilsite.com -> does NOT match */ const REDIRECT_DOMAINS = [ 'viglink.com', 'avantlink.com', 'sovrn.com', 'sovrn.co' ]; /* * Common query-string parameters used to hold the real destination URL. */ const PARAM_CANDIDATES = new Set([ 'url', 'u', 'dest', 'destination', 'to', 'afsrc', 'redir', 'redirect', 'redirecturl', 'target', 'r' ]); /* * Set to true if you want rewritten links displayed in the browser console. */ const DEBUG = false; function log(...args) { if (DEBUG) { console.log('[Affiliate Redirect Remover]', ...args); } } /* * Strictly determine whether a hostname belongs to one of the * redirect networks. */ function isRedirectDomain(hostname) { if (!hostname) return false; const host = hostname.toLowerCase().replace(/\.$/, ''); return REDIRECT_DOMAINS.some(domain => host === domain || host.endsWith('.' + domain) ); } /* * Only permit normal HTTP/HTTPS destination URLs. */ function isValidHttpUrl(value) { if (!value || typeof value !== 'string') { return false; } try { const parsed = new URL(value); return parsed.protocol === 'http:' || parsed.protocol === 'https:'; } catch { return false; } } /* * URLSearchParams already performs one level of decoding. * * Only decode again when the current value is NOT already a valid URL. * This prevents legitimate encoded characters inside the destination URL * from being unnecessarily decoded. */ function normalizeDestination(value) { if (!value) return null; let candidate = value.trim(); if (isValidHttpUrl(candidate)) { return candidate; } for (let i = 0; i < 2; i++) { try { const decoded = decodeURIComponent(candidate); if (decoded === candidate) { break; } candidate = decoded; if (isValidHttpUrl(candidate)) { return candidate; } } catch { break; } } return null; } /* * Extract the real destination URL from one redirect wrapper. */ function extractDestination(href) { try { const parsed = new URL(href); if (!isRedirectDomain(parsed.hostname)) { return null; } /* * Parameter matching is case-insensitive. */ for (const [key, value] of parsed.searchParams.entries()) { if (!PARAM_CANDIDATES.has(key.toLowerCase())) { continue; } const destination = normalizeDestination(value); if (destination) { return destination; } } return null; } catch (error) { log('Unable to parse URL:', href, error); return null; } } /* * Unwrap multiple redirect layers if one affiliate redirect points * through another supported affiliate redirect. * * The depth limit prevents malformed links from creating a loop. */ function unwrapRedirect(href, maxDepth = 5) { let current = href; let changed = false; const seen = new Set(); for (let depth = 0; depth < maxDepth; depth++) { if (seen.has(current)) { break; } seen.add(current); const destination = extractDestination(current); if (!destination || destination === current) { break; } current = destination; changed = true; } return changed ? current : null; } /* * Rewrite an individual link. */ function fixLink(link) { if (!(link instanceof HTMLAnchorElement)) { return; } const href = link.href; if (!href) { return; } const directUrl = unwrapRedirect(href); if (directUrl && directUrl !== href) { log('Rewriting:', href, '->', directUrl); link.href = directUrl; } } /* * Scan all links currently present on the page. */ function scan(root = document) { if (!root?.querySelectorAll) { return; } root.querySelectorAll('a[href]').forEach(fixLink); } /* * Initial page scan. */ scan(); /* * Catch links immediately before the user interacts with them. * * This provides another layer of protection against sites that rewrite * links shortly before a click. */ function fixClickedLink(event) { const target = event.target; if (!(target instanceof Element)) { return; } const link = target.closest('a[href]'); if (link) { fixLink(link); } } document.addEventListener('pointerdown', fixClickedLink, true); document.addEventListener('click', fixClickedLink, true); /* * Watch for: * * 1. New links added dynamically. * 2. Existing links whose href attribute is changed after page load. */ const observer = new MutationObserver(mutations => { for (const mutation of mutations) { if ( mutation.type === 'attributes' && mutation.target instanceof HTMLAnchorElement ) { fixLink(mutation.target); continue; } if (mutation.type === 'childList') { for (const node of mutation.addedNodes) { if (!(node instanceof Element)) { continue; } if (node instanceof HTMLAnchorElement) { fixLink(node); } scan(node); } } } }); observer.observe(document.documentElement, { childList: true, subtree: true, attributes: true, attributeFilter: ['href'] }); })(); Brave for desktop can take this script above with no add-ons or plugins. It has native support for "Scriptlets" if Developer Mode is enabled. I figured this out after being annoyed at not being able to clearly see the target URL due to the restructuring of the link with the click tracker. Also as mentioned copying a link to share or bookmark was picking up this BS sovrn url with it depending how it was manipulated. Go to the settings page by pasting this into the URL box: brave://settings/shields/filters Scroll down and toggle on the "Developer Mode" Create custom filter: ar15.com##+js(user-sovrn-direct.js) and Save.Then "Add new scriptlet" and name it: sovrn-direct Then paste in the script from the post I quoted and save all that. Refresh browser...... |
|
Originally Posted By Piratepast40: Really not sure if I'm supposed to care about this or not. Since I'm an ARF/GD bazillionaire with a wife sporting vodknockers, guess I'll subscribe and let one of my minions see if it's important. Given it's going to fingerprint you and your online activity to arfcom at some level it's probably more meaningful than driving past a flock camera lol. |
|
Originally Posted By Cobalt135: Brave for desktop can take this script above with no add-ons or plugins. It has native support for "Scriptlets" if Developer Mode is enabled. I figured this out after being annoyed at not being able to clearly see the target URL due to the restructuring of the link with the click tracker. Also as mentioned copying a link to share or bookmark was picking up this BS sovrn url with it depending how it was manipulated. Go to the settings page by pasting this into the URL box: brave://settings/shields/filters Scroll down and toggle on the "Developer Mode" Create custom filter: ar15.com##+js(user-sovrn-direct.js) and Save.Then "Add new scriptlet" and name it: sovrn-direct Then paste in the script from the post I quoted and save all that. Refresh browser...... Originally Posted By Cobalt135: Originally Posted By Trump45: // ==UserScript== // @name Remove VigLink, AvantLink, and Sovrn Redirects // @namespace https://tampermonkey.net/ // @version 2.0 // @description Replace VigLink, AvantLink, and Sovrn affiliate redirect links with their direct destination URLs // @match *://*/* // @run-at document-end // @grant none // ==/UserScript== (function () { 'use strict'; /* * Redirect networks to remove. * * Matching is restricted to the actual domain or one of its subdomains. * Example: * redirect.viglink.com -> matches * viglink.com -> matches * viglink.com.evilsite.com -> does NOT match */ const REDIRECT_DOMAINS = [ 'viglink.com', 'avantlink.com', 'sovrn.com', 'sovrn.co' ]; /* * Common query-string parameters used to hold the real destination URL. */ const PARAM_CANDIDATES = new Set([ 'url', 'u', 'dest', 'destination', 'to', 'afsrc', 'redir', 'redirect', 'redirecturl', 'target', 'r' ]); /* * Set to true if you want rewritten links displayed in the browser console. */ const DEBUG = false; function log(...args) { if (DEBUG) { console.log('[Affiliate Redirect Remover]', ...args); } } /* * Strictly determine whether a hostname belongs to one of the * redirect networks. */ function isRedirectDomain(hostname) { if (!hostname) return false; const host = hostname.toLowerCase().replace(/\.$/, ''); return REDIRECT_DOMAINS.some(domain => host === domain || host.endsWith('.' + domain) ); } /* * Only permit normal HTTP/HTTPS destination URLs. */ function isValidHttpUrl(value) { if (!value || typeof value !== 'string') { return false; } try { const parsed = new URL(value); return parsed.protocol === 'http:' || parsed.protocol === 'https:'; } catch { return false; } } /* * URLSearchParams already performs one level of decoding. * * Only decode again when the current value is NOT already a valid URL. * This prevents legitimate encoded characters inside the destination URL * from being unnecessarily decoded. */ function normalizeDestination(value) { if (!value) return null; let candidate = value.trim(); if (isValidHttpUrl(candidate)) { return candidate; } for (let i = 0; i < 2; i++) { try { const decoded = decodeURIComponent(candidate); if (decoded === candidate) { break; } candidate = decoded; if (isValidHttpUrl(candidate)) { return candidate; } } catch { break; } } return null; } /* * Extract the real destination URL from one redirect wrapper. */ function extractDestination(href) { try { const parsed = new URL(href); if (!isRedirectDomain(parsed.hostname)) { return null; } /* * Parameter matching is case-insensitive. */ for (const [key, value] of parsed.searchParams.entries()) { if (!PARAM_CANDIDATES.has(key.toLowerCase())) { continue; } const destination = normalizeDestination(value); if (destination) { return destination; } } return null; } catch (error) { log('Unable to parse URL:', href, error); return null; } } /* * Unwrap multiple redirect layers if one affiliate redirect points * through another supported affiliate redirect. * * The depth limit prevents malformed links from creating a loop. */ function unwrapRedirect(href, maxDepth = 5) { let current = href; let changed = false; const seen = new Set(); for (let depth = 0; depth < maxDepth; depth++) { if (seen.has(current)) { break; } seen.add(current); const destination = extractDestination(current); if (!destination || destination === current) { break; } current = destination; changed = true; } return changed ? current : null; } /* * Rewrite an individual link. */ function fixLink(link) { if (!(link instanceof HTMLAnchorElement)) { return; } const href = link.href; if (!href) { return; } const directUrl = unwrapRedirect(href); if (directUrl && directUrl !== href) { log('Rewriting:', href, '->', directUrl); link.href = directUrl; } } /* * Scan all links currently present on the page. */ function scan(root = document) { if (!root?.querySelectorAll) { return; } root.querySelectorAll('a[href]').forEach(fixLink); } /* * Initial page scan. */ scan(); /* * Catch links immediately before the user interacts with them. * * This provides another layer of protection against sites that rewrite * links shortly before a click. */ function fixClickedLink(event) { const target = event.target; if (!(target instanceof Element)) { return; } const link = target.closest('a[href]'); if (link) { fixLink(link); } } document.addEventListener('pointerdown', fixClickedLink, true); document.addEventListener('click', fixClickedLink, true); /* * Watch for: * * 1. New links added dynamically. * 2. Existing links whose href attribute is changed after page load. */ const observer = new MutationObserver(mutations => { for (const mutation of mutations) { if ( mutation.type === 'attributes' && mutation.target instanceof HTMLAnchorElement ) { fixLink(mutation.target); continue; } if (mutation.type === 'childList') { for (const node of mutation.addedNodes) { if (!(node instanceof Element)) { continue; } if (node instanceof HTMLAnchorElement) { fixLink(node); } scan(node); } } } }); observer.observe(document.documentElement, { childList: true, subtree: true, attributes: true, attributeFilter: ['href'] }); })(); Brave for desktop can take this script above with no add-ons or plugins. It has native support for "Scriptlets" if Developer Mode is enabled. I figured this out after being annoyed at not being able to clearly see the target URL due to the restructuring of the link with the click tracker. Also as mentioned copying a link to share or bookmark was picking up this BS sovrn url with it depending how it was manipulated. Go to the settings page by pasting this into the URL box: brave://settings/shields/filters Scroll down and toggle on the "Developer Mode" Create custom filter: ar15.com##+js(user-sovrn-direct.js) and Save.Then "Add new scriptlet" and name it: sovrn-direct Then paste in the script from the post I quoted and save all that. Refresh browser...... |
|
Originally Posted By Cobalt135: Brave for desktop can take this script above with no add-ons or plugins. It has native support for "Scriptlets" if Developer Mode is enabled. I figured this out after being annoyed at not being able to clearly see the target URL due to the restructuring of the link with the click tracker. Also as mentioned copying a link to share or bookmark was picking up this BS sovrn url with it depending how it was manipulated. Go to the settings page by pasting this into the URL box: brave://settings/shields/filters Scroll down and toggle on the "Developer Mode" Create custom filter: ar15.com##+js(user-sovrn-direct.js) and Save.Then "Add new scriptlet" and name it: sovrn-direct Then paste in the script from the post I quoted and save all that. Refresh browser...... Thanks! Works in Brave desktop had to copy/paste the code into notepad to make sure it didn't paste in the sovrn links |
|
Originally Posted By Trump45: This version retains the original script's simple purpose but makes it substantially safer and more reliable. Most importantly, it replaces the loose hostname.includes() test with strict domain/subdomain matching, so a domain such as viglink.com.malicious-site.com cannot be mistaken for VigLink. It also safely validates that extracted destinations are genuine http:// or https:// URLs, avoids unnecessarily decoding already-valid URLs, performs case-insensitive parameter matching, and can unwrap several nested affiliate redirects. In addition to scanning the page when it loads, it now watches both new links and existing links whose href is changed later by JavaScript, and it performs another check immediately when a link is clicked. It still uses @grant none, makes no external network requests, loads no outside code, and sends no information anywhere. The original script's basic behavior and scope are preserved while addressing the weaknesses I found in its domain matching, decoding, and dynamic-link handling. (code snipped)
|
01010111 | 57 | 127 | LXXXVII
|
Originally Posted By DDiggler: Before, users would help out OP with "link made hot." Now, the hotness will be "link left cold" so your browser can autogen the URL link and avoid the tracking. ![]() Not.me im.going to.start making.every reply.with a.period in.between every.other pair.of words.in my.post just.to waste.system re.sources
|
|
Or just use Brave browser (and for 100 other reasons) post is from 2021. Make sure to copy and paste it ![]() https://brave.com/privacy-updates/11-debouncing/ protect users against bounce tracking by recognizing when the user is about to visit a known tracking domain, skipping visiting the tracking site all together, and instead directly navigating the user to the intended destination. Bounce Tracking (or, Jerks Refuse to Take “No” for an Answer) Bounce tracking is another technique trackers use to try and violate your privacy and follow you around the Web. Bounce tracking is an attempt to circumvent restrictions on third-party storage in privacy-focused browsers. The technique works by injecting additional sites between a site you’re visiting, and the site to which you intend to navigate. These intermediate sites over time learn what sites you’ve visited, and so can perform the same kinds of tracking sites used to use third-party cookies for. Brave uses a Brave maintained list to identify bounce tracking URLs. This list is maintained by Brave, and is drawn from a mix of crowd-sourcing and existing open-source projects, including the terrific URL Tracking Stripper extension, Link Clearer extension, and Clear URLs extension, along with additional rules maintained by Brave. Brave will maintain this combined list going forward and welcomes collaboration with other similar projects. |
|
Originally Posted By anothermisanthrope: Or just use Brave browser (and for 100 other reasons) post is from 2021. Make sure to copy and paste it ![]() https://brave.com/privacy-updates/11-debouncing/ Originally Posted By anothermisanthrope: Or just use Brave browser (and for 100 other reasons) post is from 2021. Make sure to copy and paste it ![]() https://brave.com/privacy-updates/11-debouncing/ protect users against bounce tracking by recognizing when the user is about to visit a known tracking domain, skipping visiting the tracking site all together, and instead directly navigating the user to the intended destination. Bounce Tracking (or, Jerks Refuse to Take “No” for an Answer) Bounce tracking is another technique trackers use to try and violate your privacy and follow you around the Web. Bounce tracking is an attempt to circumvent restrictions on third-party storage in privacy-focused browsers. The technique works by injecting additional sites between a site you’re visiting, and the site to which you intend to navigate. These intermediate sites over time learn what sites you’ve visited, and so can perform the same kinds of tracking sites used to use third-party cookies for. Brave uses a Brave maintained list to identify bounce tracking URLs. This list is maintained by Brave, and is drawn from a mix of crowd-sourcing and existing open-source projects, including the terrific URL Tracking Stripper extension, Link Clearer extension, and Clear URLs extension, along with additional rules maintained by Brave. Brave will maintain this combined list going forward and welcomes collaboration with other similar projects. wish all browsers offered this feature. |
"Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote."
Necessity is the plea for every infringement of freedom. It is the argument of tyrants; it is the creed of slaves.
Necessity is the plea for every infringement of freedom. It is the argument of tyrants; it is the creed of slaves.
|
Originally Posted By brahm: i am outraged by this. but i don't know what it means other than i am no longer suppose to click links on this site. that is what i have gathered from this thread. This is ridiculous. There's no reason for a site in our privacy-sensitive community to need to track who clicks every link on this site. |
"The state is not the solution. It is the problem." --Javier Milei
"If this is how the state treats its law-abiding citizens, it doesn't deserve to have any"
--Solzhenitsyn
"If this is how the state treats its law-abiding citizens, it doesn't deserve to have any"
--Solzhenitsyn
|
Originally Posted By anothermisanthrope: Or just use Brave browser (and for 100 other reasons) post is from 2021. Make sure to copy and paste it ![]() https://brave.com/privacy-updates/11-debouncing/ that's great and all, but Sovrn isn't on their debounce list I still had to paste in the script from above to get brave to work (the mobile app still tries to jump to the sovrn domain) |
|
Originally Posted By AmericaJr: that's great and all, but Sovrn isn't on their debounce list I still had to paste in the script from above to get brave to work (the mobile app still tries to jump to the sovrn domain) Originally Posted By AmericaJr: Originally Posted By anothermisanthrope: Or just use Brave browser (and for 100 other reasons) post is from 2021. Make sure to copy and paste it ![]() https://brave.com/privacy-updates/11-debouncing/ that's great and all, but Sovrn isn't on their debounce list I still had to paste in the script from above to get brave to work (the mobile app still tries to jump to the sovrn domain) Brave confirms that its default filter set includes EasyPrivacy and uBlock Origin filters, even though some of these aren't necessarily displayed as individually selectable lists in brave://settings/shields/filters. GitHub So if you're asking “What list is responsible for Brave blocking Sovrn?”, the answer is: EasyPrivacy is the primary list to investigate, not the Brave Debouncing list. |
