假设我有一个网站:
www.anywhere.com/test.php
$source = $_SERVER['HTTP_REFERER'];
有一个链接到我的网站。
www.nowhere.com/remote1.html
<a href="www.anywhere.com/test.php">Link</a>
另一个做同样的事情
www.somewhere.com/remote2.html
<a href="www.anywhere.com/test.php">Link</a>
如果我点击www.somewhere.com/remote2.html
上的链接,www.anywhere.com/test.php $source
将为www.somewhere.com/remote2.html
。
我想知道somewhere.com/remote2.html
是否会以任何方式伪装自己,以便在点击其链接时,anywhere.com/test.php $source
将是另一个网址(例如www.nowhere.com/remote1.html
)
如果我有一个网络服务,我接受来自认可网站的请求,我需要确保没有人能够通过伪造他们的URI与来自认可网站的URI来访问我的网络服务。
由于
答案 0 :(得分:2)
任何请求标头都可以伪造。这些是由客户发送的,很容易被欺骗。你不应该依赖这些价值观。不能保证它是准确的。
在PHP中,您可以使用cURL
来欺骗它:
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Referer: http://some-accredted-website.com/',
));
甚至还有浏览器扩展/插件可以做到这一点。例如,Firefox有Modify Headers个插件。甚至还有像Fiddler这样的在线服务可以让您更改这些值。
底线:绝不依赖$_SERVER['HTTP_REFERER']
准确。
答案 1 :(得分:0)
referer只是HTTP头中的一个字段,因此您可以手动创建HTTP请求,也可以使用允许您将任何字段设置为任何值的应用程序,这样更容易,因为您不需要手动计算长度