为什么$ _SERVER ['HTTP_REFERER']仍显示原始引荐来源?

时间:2010-08-09 21:13:34

标签: php

我想欺骗推荐人。

A.com - > B.com - > Destination.com

A.com我

header("Location: http://B.com/redirect.php?site='http://destination.com'");

B.com我有

$target = $_GET['site'];
header("Location: $target");

Destination.com将$_SERVER['HTTP_REFERER'];写入数据库,我可以确认参与欺骗是否有效。

然而,数据库显示referer是A.com而不是B.com!我哪里出错了?

3 个答案:

答案 0 :(得分:5)

位置标头是重定向的。你告诉浏览器“你想要的不在这里,转而去看看。”

因此,浏览器很乐意将相同的请求提交给新网址。

当然,作为相同的请求,发送的推荐人不会改变。

答案 1 :(得分:0)

没有尝试' 并详细说明您的GET:)

答案 2 :(得分:0)

如果您不希望引用者通过,请不要使用真正的HTTP重定向。还有其他一些方法通常不如正确的重定向,但如果你担心避免引用漏洞而不太担心可用性或SEO,那么这些方法会很有用。

  • JavaScript重定向:location.replace('someurl');

这会将B.com上的重定向页面作为除IE之外的所有浏览器的引用者传递。

  • 元重定向:<meta http-equiv="Refresh" content="0;url=someurl" />。引用者将是Opera
  • 上的重定向页面

这会将引荐来源设置为Opera,Safari和Chrome上的B.com,而不是IE或Firefox。

  • 指向action="someurl"的表单,使用JavaScript自动提交。这会在URL中添加一个空的?查询,并且在没有bfcache的浏览器中以相当令人讨厌的方式打破后退按钮。

这总是将引荐者设置为B.com。

  • 请记住在页面中提供一个链接(如果您要传递引荐来源)或纯文本可复制版本(如果不这样做)作为辅助功能的备份。