我可以伪造一个远程页面的原始超链接,说它来自另一个页面吗?

时间:2013-11-21 12:29:50

标签: php html

假设我有一个网站:

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来访问我的网络服务。

由于

2 个答案:

答案 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请求,也可以使用允许您将任何字段设置为任何值的应用程序,这样更容易,因为您不需要手动计算长度