首頁  >  文章  >  後端開發  >  如何用PHP偽造referer突破網盤禁止外連

如何用PHP偽造referer突破網盤禁止外連

不言
不言原創
2018-06-21 14:31:421906瀏覽

這篇文章主要介紹了關於如何用PHP偽造referer突破網盤禁止外連,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

一般的國內網盤為控制流量,都會禁止網盤內的文件外鏈。點網盤裡檔案的連結通常會轉到專門的下載頁面,必須從這個頁面才能下載檔案。

比如我放納米盤裡的文件http://img.namipan.com/downfile/da333ee178bdad6531d1ec1540cf86277c116b6300887600/02.Paid In Full.mp3 

這個地址不能直接下載也不能在網頁播放器播放,點選下載轉到了一個下載頁面。要能夠直接下載這個文件或播放這個文件,那就要偽造referfer,欺騙伺服器,referfer是來自奈米盤的連結。 

最開始使用的方法是用PHP內建的函數stream_context_create。

程式碼如下: 

function referfile($url, $refer=”) { 
$opt=array('http'=>array('header'=>”Referer: $refer”)); 
$context=stream_context_create( $opt); 
return file_get_contents($url,false, $context); 
}

但這段程式碼有個缺點,file_get_contents其實是把對方伺服器的檔案讀到了自己的伺服器上然後再傳送給瀏覽器,不但加大自己伺服器的壓力,而且下載反應速度還很慢,這並不是很好的解決方法。 

後來又看了遍手冊,既要減輕自己伺服器的壓力,又能達到迷惑對方伺服器。修改header裡的Referfer資訊就可以了。 

改版後的程式碼如下: 

<?php 
$url="img.namipan.com/downfile/da333ee178bdad6531d1ec1540cf86277c116b6300887600/02.Paid%20In%20Full.mp3";//这里的url要过滤掉http:// 
$urlarr=explode("/",$url); 
$domain=$urlarr[0];//分解出域名 
$getfile=str_replace($urlarr[0],",$url); 
$content = @fsockopen("$domain", 80, $errno, $errstr, 12);//先连接上对方的服务器 
if (!$content){//无法链接就提示错误信息 
die("对不起,无法连接上 $domain 。"); 
} 
fputs($content, "GET $getfile HTTP/1.0\r\n"); 
fputs($content, "Host: $domain\r\n"); 
fputs($content, "Referer: $domain\r\n");//伪造referfer 
fputs($content, "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n\r\n"); 

while (!feof($content)) { 
$tp.=fgets($content, 128);将头部信息读取出来,里面将包含:Location:http://xxx/xxx.mp3,我们要的就是这个地址。 
} 
$arr=explode("\n",$tp); 
$arr1=explode("Location: ",$tp); 
$arr2=explode("\n",$arr1[1]);//分解出Location:后面的地址 
header(&#39;Content-Type:application/force-download&#39;); 
header("location:".$arr2[0]); 
fclose($content);

OK,目的達到了。

這個原來的網址:http://img.namipan.com/downfile/3a7c64518d46d986283eab73175a8b119305a76480b89200/Equilibrium-Turis19305a76480b89200/Equilibrium-Turis19305a76480b89200/Equilibrium-Turis19305a76480b89200/Equilibrium-Turis19305a76480b89200/Equilibrium-Turis19305a76480b89200/Equilibrium-Turis19305a76480b89200/Equilibrium-Turis_Fratyr-02-1 mms。

#最原始的破解網盤限制外鏈的php程式碼,如果各位想要學習研究可以繼續看,如果要拿程式碼直接用需要改進,這個程式碼僅供參考學習。


新建一個檔案file.php。後面的參數就是要偽造referfer的目標地址吧。如:file.php/http://www.xxx.xxx/xxx.mp3

<? 
$url=str_replace(&#39;/file.php/&#39;,&#39;&#39;,$_SERVER["REQUEST_URI"]);//得出需要转换的网址。这里我就偷懒,不做安全检测了,需要的自己加上去 
$downfile=str_replace(" ","%20",$url);//替换空格之类,可以根据实际情况进行替换 
$downfile=str_replace("http://","",$downfile);//去掉http:// 
$urlarr=explode("/",$downfile);//以"/"分解出域名 
$domain=$urlarr[0];//域名 
$getfile=str_replace($urlarr[0],&#39;&#39;,$downfile);//得出header中的GET部分 
$content = @fsockopen("$domain", 80, $errno, $errstr, 12);//连接目标主机 
if (!$content){//链接不上就提示错误 
die("对不起,无法连接上 $domain 。"); 
} 
fputs($content, "GET $getfile HTTP/1.0\r\n"); 
fputs($content, "Host: $domain\r\n"); 
fputs($content, "Referer: $domain\r\n");//伪造部分 
fputs($content, "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n\r\n"); 

while (!feof($content)) { 
$tp.=fgets($content, 128); 
if (strstr($tp,"200 OK")){ //这里要说明一下。header的第一行一般是请求文件的状态。具体请参照HTTP 1.1状态代码及其含义hi.baidu.com/110911/blog/item/21f20d2475af812ed50742c5.html这里 是正常的文件请求状态,只需直接转向就可以。其他状态的继续执行程序 

header("Location:$url"); 
die(); 
} 
} 

//302 转向,大部分的防盗链系统都是先判断referfer,对了的话再转向真实的地址。下面就是获取真实的地址。 
$arr=explode("\n",$tp); 
$arr1=explode("Location: ",$tp);//分解出Location后面的真时地址 
$arr2=explode("\n",$arr1[1]); 
header(&#39;Content-Type:application/force-download&#39;);//强制下载 
header("location:".$arr2[0]);//转向目标地址 
die(); 
?>
115網盤圖片外鏈測試(不是我做的):原始網址:http:// u.115.com/file/f3b7c9046 外連結位址:http://115.pp.ru/f3b7c9046/02.jpg 

#115網盤外鏈測試2(也不是我做的):http://gg.org.ru/115.php/提取碼/xxx

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:


透過php實作CMS中展示文章類別

#關於php中str_replace取代漏洞的分析


以上是如何用PHP偽造referer突破網盤禁止外連的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn