Set referer for XMLHttpRequest?
Asked Answered
S

3

12

I am successfully sending a XMLHttpRequest by using:

var createCORSRequest = function(method, url) {
  var xhr = new XMLHttpRequest();
  if ("withCredentials" in xhr) {
    // Most browsers.
    xhr.open(method, url, true);
  } else if (typeof XDomainRequest != "undefined") {
    // IE8 & IE9
    xhr = new XDomainRequest();
    xhr.open(method, url);
  } else {
    // CORS not supported.
    xhr = null;
  }
  return xhr;
};

var url = 'http://www.whatismyip.com';
var method = 'GET';
var xhr = createCORSRequest(method, url);

xhr.onload = function() {
  // Success code goes here.
};

xhr.onerror = function() {
  // Error code goes here.
};


xhr.setRequestHeader('referer', 'http://www.google.com');
xhr.send();

However, I could not able to define my referer. What is the correct way to add the custom referer?

Sora answered 30/11, 2014 at 21:36 Comment(1)
I have same problem and could not understand why XMLHttpRequest does not have referrer or User-Agent informations? Is there any way to catch them all using fetch or axios?Confirmand
G
19

You cannot. The XMLHttpRequest specification forbids the altering of the referer header (this stops sites lying in it to bypass security checks which some sites use the referer for).

Terminate these steps if header is a case-insensitive match for one of the following headers:

  • Referer
Gumption answered 30/11, 2014 at 21:50 Comment(0)
C
3

You can try something like this:

xhr.setRequestHeader('X-Referer', window.location.href);

And then read this custom X-Referer header.

Chromomere answered 12/7, 2020 at 10:40 Comment(0)
L
-2

Answer found on https://www.trustedsec.com/blog/setting-the-referer-header-using-javascript/

You can set it using window.history.replaceState(null, '', 'https://yourwebsite.com/forged/referer')

As far as I know it only works with the same domain, but you can forge the path this way.

See https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState

Lanitalank answered 18/1, 2022 at 14:53 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.