Stop link from sending referrer to destination

JavascriptHrefReferrer

Javascript Problem Overview


I have a page where I don't want the outbound links to send a referrer so the destination site doesn't know where they came from.

I'm guessing this isn't possible but I just want to make sure there weren't any hidden javascript magic that could do it and that would work with some (if not most) browsers.

Maybe some clever HTTP status code redirecting kung-fu?

Something like this would be perfect

<a href="example.com" send_referrer="false">link</a>

Javascript Solutions


Solution 1 - Javascript

I was looking for just the same thing, and it seems like this will be a feature of HTML5.

The tag you are looking for is rel="noreferrer".

It is already implemented in Webkit (Chrome, etc.), as well as Firefox, but your mileage may vary.

As of 2020, it is supported in all major browsers, with the exception of Opera Mini and old versions of IE11.

Solution 2 - Javascript

For anyone who's visiting in 2015 and beyond, there's now a proper solution gaining support.

The HTTP Referrer Policy spec lets you control referrer-sending for links and subresources (images, scripts, stylesheets, etc.) and, at the moment, it's supported on Firefox, Chrome, Opera, and Desktop Safari 11.1.

Edge, IE11, iOS Safari, and desktop versions of Safari prior to 11.1 support an older version of the spec with never, always, origin, and default as the options.

According to the spec, these can be supported by specifying multiple policy values. Unrecognized ones will be ignored and the last recognized one will win.

<meta name="referrer" content="never">
<meta name="referrer" content="no-referrer">

Also, if you want to apply it to audio, img, link, script, or video tags which require a crossorigin attribute, prefer crossorigin="anonymous" where possible, so that only the absolute minimum (the Origin header) will be shared.

(You can't get rid of the Origin header while using CORS because the remote sites need to know what domain is making the request in order to allow or deny it.)

Solution 3 - Javascript

HTML 5 includes rel="noreferrer", which is supported in all major browsers. So for these browsers, you can simply write:

<a href="example.com" rel="noreferrer">link</a>

There's also a shim available for other browsers: https://github.com/knu/noreferrer

Solution 4 - Javascript

Bigmack is on the right track, but a javascript location change still sends a referrer in firefox. Using a meta refresh seems to solve the problem for me.

<a href='data:text/html;charset=utf-8, <html><meta http-equiv="refresh" content="0;URL=&#39;http://google.com/&#39;"></html>'>Link</a>

Solution 5 - Javascript

I was trying to figure this out too.

The solution I thought of was to use a data url to hide the actual page I am coming from.

<a href='data:text/html;charset=utf-8, <html><script>window.location = "http://google.ca";</script></html>'>Link</a>

This link opens a page that only contains javascript to load a different page. In my testing no referrer is given to the final destination. I don't know what it could send as a referrer if it tried anyways, maybe the data url ? which wouldn't give away where you came from.

This works in Chrome. Chrome is my only concern for my current problem but for browsers that don't like javascript in pages that are data urls. You could probably try a meta refresh.

Solution 6 - Javascript

In addition to the information already provided. Lots more information on the topic here: https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-no-referrer

Specifically allowing you to either send or not send referral information if you need different rules for same-origin or cross-origin requests.

Something to consider depending on your specific use case. i.e. if you are pulling in images/css/javascript from 3rd party websites, then you may want to not identify the URL that you are doing this from and hence would use the no-referrer option. Whereas if you are linking out to other websites from your own website, you may want them to know that you are sending them traffic. Always think through the implications of this on both sides. If there is a conflict in these two areas, then there are other options such as adding UTM tracking parameters to the end of URLs which may come in handy for some people. Full details here: https://www.contradodigital.com/2014/06/03/importance-utm-tracking-parameters-social-media/

Solution 7 - Javascript

I don't know if I'm missing something here and am v happy to be corrected, but wouldn't a URL shortening service meet your needs here?

Presumably the logs at the destination site would only show the domain of the shortening service, not the initial referring domain, so you would remain hidden.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionnolanproView Question on Stackoverflow
Solution 1 - JavascriptDrewmateView Answer on Stackoverflow
Solution 2 - JavascriptssokolowView Answer on Stackoverflow
Solution 3 - JavascriptWilfred HughesView Answer on Stackoverflow
Solution 4 - JavascriptzaiusView Answer on Stackoverflow
Solution 5 - Javascriptuser1586294View Answer on Stackoverflow
Solution 6 - JavascriptMichael CropperView Answer on Stackoverflow
Solution 7 - JavascriptTom FallowfieldView Answer on Stackoverflow