10

通常,在搜索答案时,我发现某些网站将允许您阅读他们提供的信息,例如,如果引荐来源是 google.com。但是,如果您直接链接到该信息,它将不可用。

我正在寻找的是最小的 PHP 脚本,它将设置我选择的引用者和目的地,如下所示:

http://example.com/ref_red.php?referer=http://google.com/&end=http://example.net/

笔记:

  • ref_red.php是我示例中脚本的名称。
  • refererend应该接受httphttpsftp
  • refererend可以包含任何类型的 URI,例如简单如http://end.com或复杂如: http://example.com/some/rr/print.pl?document=rr

注意:根据回复中的建议,我正在添加此内容。该脚本本身并不是一个完整的代理。仅会代理初始 HTTP 请求(而不是图像等后续请求),其唯一目的是设置referer

4

3 回答 3

13

此函数应该为您提供一个起点,它将获取具有指定引荐来源网址的任何 http url

处理查询参数应该很简单,所以我将把这部分留给你做

<?php

    echo geturl('http://some-url', 'http://referring-url');

    function geturl($url, $referer) { 

        $headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg,text/html,application/xhtml+xml'; 
        $headers[] = 'Connection: Keep-Alive'; 
        $headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8'; 
        $useragent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'; 

        $process = curl_init($url); 
        curl_setopt($process, CURLOPT_HTTPHEADER, $headers); 
        curl_setopt($process, CURLOPT_HEADER, 0); 
        curl_setopt($process, CURLOPT_USERAGENT, $useragent);
        curl_setopt($process, CURLOPT_REFERER, $referer);
        curl_setopt($process, CURLOPT_TIMEOUT, 30); 
        curl_setopt($process, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1); 

        $return = curl_exec($process); 
        curl_close($process); 

        return $return; 
    } 

?>
于 2009-05-14T01:21:57.657 回答
2

您可以使用 Internet 上提供的允许隐藏引用者(通过设置其地址)的服务之一,但您不能强加一个不是实际引用者的特定引用者。在将用户重定向到目标网站之前,必须将用户实际重定向到该网站(将显示为引用者)。

其中一项服务: http: //linkanon.com

编辑:

由于您现在更改了问题,因此我关于在 PHP 中编写一个充当代理的用户代理的评论适用,但这接近于犯罪活动,因为您将向可能认为的用户显示第三方网站她在实际的网站中,而实际上她将加载您的内容(您传递的内容)。要执行这种近乎犯罪的活动(您距离尝试读取用户名和密码仅一步之遥),您需要使用自己的书面用户代理使用 PHP 加载第三方的网站内容,该用户代理指定虚假的引荐来源并简单地传递输出给您网站的访问者。PHP 中允许发送 HTTP 标头的函数是 header($header):

header("Referer: http://example.org");

您可以尝试阅读有关Referer标头的HTTP(这是世界转向的协议)规范,而不是对试图提供帮助的人大喊大叫:http: //www.w3.org/Protocols/rfc2616/rfc2616-sec14 .html (参见第 14.36 节)。

您可能还想阅读http://en.wikipedia.org/wiki/Referrer_spoofing,您可以在其中看到所有关于客户端的内容。PHP是服务器端。你所能做的就是尝试编写一个由 PHP 生成的客户端代码(Javascript),但如果你运气好的话,那么你正在闯入用户的世界。

于 2009-05-13T12:03:07.843 回答
0

引用者是由您的浏览器设置的,而不是由任何服务器端机制设置的。我猜你可以在 PHP 中构造一个代理来发出远程服务器的请求并适当地设置引用标头。只使用 Firefox 插件似乎更有用,例如http://www.stardrifter.org/refcontrol/

编辑:我会改写你的问题,以明确你想要编写一个 PHP 代理,并带有一个自定义的引用标头。我可能只是修改类似的东西http://sourceforge.net/projects/poxy/获取referrer 参数并将其传递。

再次编辑:你可能很清楚你在问什么,但要求不可能的事情并不能使它成为可能。浏览器负责设置referer header;它使用导致它重定向到新资源的 URI。你要求一个脚本,上面写着“请访问http://example.net,但当你这样做时假装我实际上是 www.foo.com”。服务器没有机制来指示浏览器“撒谎”它来自哪里。

我想这可能是通过一些复杂的 JavaScript 黑客攻击实现的,但这将是黑帽意义上的黑客攻击——一个能够强制浏览器欺骗引用者的网站将是一个真正的安全漏洞。

于 2009-05-13T11:32:46.007 回答