Heim > Artikel > Backend-Entwicklung > So verwenden Sie PHP, um den Referrer zu fälschen, um die Netzwerkfestplatte zu durchbrechen und externe Verbindungen zu verhindern
In diesem Artikel wird hauptsächlich beschrieben, wie man mithilfe von PHP das Netzwerkfestplattenverbot für externe Verbindungen durchbricht. Jetzt kann ich ihn mit allen teilen, die ihn benötigen
Allgemeines Inlandsnetzwerk Um den Datenverkehr zu kontrollieren, werden externe Links zu Dateien auf der Netzwerkfestplatte verboten. Wenn Sie auf den Link zu der Datei auf der Netzwerkfestplatte klicken, gelangen Sie normalerweise zu einer speziellen Download-Seite, und Sie müssen die Datei von dieser Seite herunterladen.
Zum Beispiel die Datei, die ich auf der Nanodisk abgelegt habe: http://img.namipan.com/downfile/da333ee178bdad6531d1ec1540cf86277c116b6300887600/02.Paid%20In%20Full.mp3
Diese Adresse kann nicht heruntergeladen werden direkt oder spielen Sie es im Webplayer ab und klicken Sie auf „Herunterladen“, um zu einer Download-Seite zu gelangen. Wenn Sie diese Datei direkt herunterladen oder abspielen möchten, müssen Sie den Referfer fälschen und den Server täuschen. Der Referfer ist ein Link von der Nanodisk.
Die erste verwendete Methode ist die Verwendung der in PHP integrierten Funktion stream_context_create.
Der Code lautet wie folgt:
function referfile($url, $refer=”) { $opt=array('http'=>array('header'=>”Referer: $refer”)); $context=stream_context_create( $opt); return file_get_contents($url,false, $context); }
Aber dieser Code hat einen Mangel: file_get_contents liest tatsächlich die Dateien vom Server der anderen Partei auf seinen eigenen Server und sendet sie dann an den Browser . Dies erhöht nicht nur den Druck auf Ihren eigenen Server, sondern auch die Download-Reaktionsgeschwindigkeit ist sehr langsam.
Später habe ich das Handbuch noch einmal gelesen, nicht nur um den Druck auf meinen eigenen Server zu verringern, sondern auch um den Server der anderen Partei zu verwirren. Ändern Sie einfach die Referfer-Informationen in der Kopfzeile.
Der überarbeitete Code lautet wie folgt:
<?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('Content-Type:application/force-download'); header("location:".$arr2[0]); fclose($content);
OK, der Zweck ist erreicht.
Diese ursprüngliche Adresse: http://img.namipan.com/downfile/3a7c64518d46d986283eab73175a8b119305a76480b89200/Equilibrium-Turis_Fratir-02-Wingthors_Hammer.mp3
Nach der Konvertierung: <.>http:// mms .music.krmcn.com/mms.music/namipan/img~~/3a7c64518d46d986283eab73175a8b119305a76480b89200/Equilibrium-Turis_Fratir-02-Wingthors_Hammer.mp3
Anbei ein Stück Implementierungscode:
Der originellste PHP-Code zum Knacken von Netzwerkfestplattenbeschränkungen für externe Links. Wenn Sie den Code direkt verwenden und verbessern möchten, dient er als Referenz nur. Erstellen Sie eine neue Datei file.php. Der folgende Parameter ist die Zieladresse des Referfers, der gefälscht werden muss. Zum Beispiel: file.php/http://www.xxx.xxx/xxx.mp3<? $url=str_replace('/file.php/','',$_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],'',$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('Content-Type:application/force-download');//强制下载 header("location:".$arr2[0]);//转向目标地址 die(); ?>115 Network Disk Picture External Link Test (nicht von mir durchgeführt): Originaladresse: http:/ / u.115.com/file/f3b7c9046
Adresse des externen Links: http://115.pp.ru/f3b7c9046/02.jpg
Implementierung der Anzeige von Artikelklassen im CMS über PHP
Analyse der str_replace-Ersatzschwachstelle in PHP
Das obige ist der detaillierte Inhalt vonSo verwenden Sie PHP, um den Referrer zu fälschen, um die Netzwerkfestplatte zu durchbrechen und externe Verbindungen zu verhindern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!