2010-08-09 71 views
0

我试图欺骗referrer。

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'];写入数据库,我可以确认引用欺骗是否有效。

但是,数据库显示引用者是A.com而非B.com!我哪里做错了 ?

+0

可能重复的http://stackoverflow.com/questions/3444034/php-spoofing-referrer – Joseph 2010-08-09 21:19:31

回答

5

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

因此,浏览器愉快地向新的url提交相同的请求。

当然,作为相同的请求,引用者发送的内容不变。

+0

比笨拙但几乎相同的答案,我打字更简洁。为你+1。 – timdev 2010-08-09 21:27:31

+0

那么如何才能引用推荐人?可能吗 ? – KJW 2010-08-09 21:42:04

0

尝试没有“ 而进行urlencode您的GET :)

0

如果您不希望引用者通过,请不要使用真正的HTTP重定向。还有其他一些方法通常不如正确的重定向,但如果您担心避免引用漏洞并且不太担心可用性或搜索引擎优化,则可能会有用。

  • 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添加一个空的?查询,并且它会在浏览器中以非常令人讨厌的方式打破后退按钮,而这些浏览器不会缓存它。

这始终将引用链接设置为B.com。

  • 请记住在页面中提供链接(如果您要传递引用链接)或纯文本的可复制和可粘贴的版本(如果不这样做)作为辅助功能的备份。
相关问题