Javascript xmlhttprequest欺骗引用程序,然后重定向到另一个页面?

Javascript xmlhttprequest欺骗引用程序,然后重定向到另一个页面?,javascript,redirect,referrer,spoofing,Javascript,Redirect,Referrer,Spoofing,我已经使用curl(PHP)创建了一些代码,它允许我欺骗推荐人或清空推荐人,然后用欺骗的推荐人将用户引导到另一个页面 然而,这样做的缺点是头中的IP地址始终是我的服务器的IP,这不是一个有效的解决方案 问题 是否可以使用客户端脚本(即xmlhttprequest)来“更改”引用者,然后将用户引导到新页面 因此,保持用户IP地址完整,但欺骗推荐人 如果有,我们将非常感谢您的帮助 谢谢 在呈现页面时,不使用现代浏览器中的javascript 更新: 请参阅一些手动工具和其他基于javascript的

我已经使用curl(PHP)创建了一些代码,它允许我欺骗推荐人或清空推荐人,然后用欺骗的推荐人将用户引导到另一个页面

然而,这样做的缺点是头中的IP地址始终是我的服务器的IP,这不是一个有效的解决方案

问题

是否可以使用客户端脚本(即xmlhttprequest)来“更改”引用者,然后将用户引导到新页面

因此,保持用户IP地址完整,但欺骗推荐人

如果有,我们将非常感谢您的帮助


谢谢

在呈现页面时,不使用现代浏览器中的javascript

更新: 请参阅一些手动工具和其他基于javascript的平台的注释,在这些平台上,您可以欺骗推荐人。在8年前的原始问题中,似乎与提出web请求有关,答案通常仍然是“否”


我不打算编辑我所有十年前的答案,尽管我的答案是如此悲观。我为没有正确预见未来并提供一个永恒的答案提前道歉。

这似乎在Firefox Javascript控制台中起作用:

var xhr = new XMLHttpRequest; 
xhr.open("get", "http://www.example.com/", true); 
xhr.setRequestHeader( 'Referer', 'http://www.fake.com/' ); 
xhr.send();
在我的服务器日志中,我看到:

referer: http://www.fake.com/

有点晚了,但从上一篇文章开始似乎有了变化

在Chrome中(目前可能是大多数现代浏览器),不再允许通过编程方式更改“Referer”——它现在是静态的

但是,它确实允许发送自定义标头。例如:

var xhr = new XMLHttpRequest; 
xhr.open("get", "http://www.example.com/", true); 
xhr.setRequestHeader('CustomReferer', 'http://www.fake.com/'); 
xhr.send();
在PHP中,可以通过“HTTP_389;(大写标题)”读取该标题:

这就是我项目的诀窍


对我们许多人来说可能是常识,但对一些人来说,希望是有用的

您可以使用Fetch API部分修改
Referer
标题

fetch(url, {
  referrer: yourCustomizedReferer, // Note: it's `referrer` with correct spelling, and it's NOT nested inside `headers` option
  // ...
});
但是,我认为只有当原始的Referer头和您想要的Referer头位于同一个域下时,它才起作用。而且它在Safari中似乎不起作用


允许修改
Referer
头是非常意外的,尽管还有其他技巧(例如
pushState()
)可以做到这一点。

控制台具有更高的权限XHR。感谢您的帮助,我看到了这一点,您需要请求一个名为netscape.security.privilegmanager()的函数这将弹出一个许可对话框。不幸的是,这是不好的。这将是任何允许它的浏览器中的一个安全漏洞。这个答案今天在技术上是不正确的。您不能使用浏览器标准权限从JavaScript欺骗
Referer
,但可以使用基于Node.js的运行时。
fetch(url, {
  referrer: yourCustomizedReferer, // Note: it's `referrer` with correct spelling, and it's NOT nested inside `headers` option
  // ...
});