PHP - Referer重定向脚本

时间:2009-05-13 11:30:19

标签: php http-referer

通常,在搜索答案时,我发现某些网站会允许您阅读他们提供的信息(如果引用者是google.com)。但是,如果您直接链接到信息,它将无法使用。

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

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

注意:

  • ref_red.php 是我示例中脚本的名称。
  • referer end 应接受 http https ftp 。< / LI>
  • 引用结尾可以包含任何类型的URI,简单为http://end.com或复杂如下: 例如http://example.com/some/rr/print.pl?document=rr

注意:正如回复中建议的那样,我正在添加此内容。该脚本本身不是完整的代理。 只有初始HTTP请求才会被代理(不是后续请求,例如图片等),仅用于设置引用唯一用途

3 个答案:

答案 0 :(得分:11)

这个功能应该给你一个起点 它将使用指定的引用来获取任何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; 
    } 

?>

答案 1 :(得分:2)

您可以使用互联网上提供的某项服务,这些服务允许隐藏引荐(通过设置其地址),但您不能强制使用不是实际引荐来源的特定引荐来源。在将用户重定向到目标网站之前,必须将用户重定向到该网站(将显示为推荐人)。

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

编辑:

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

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

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

您也可以阅读http://en.wikipedia.org/wiki/Referrer_spoofing,其中您可以看到它与客户端有关。 PHP是服务器端。您所能做的就是尝试编写由PHP生成的客户端代码(Javascript),但如果您有任何运气,那么您将闯入用户的世界。

答案 2 :(得分:0)

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

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

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

我认为通过一些令人费解的JavaScript黑客攻击可能是可能的,但是黑帽子意味着黑客攻击 - 一个能够迫使浏览器欺骗引用者的网站将是一个真正的安全漏洞。

相关问题