ホームページ  >  記事  >  バックエンド開発  >  PHP を使用してリファラーを偽造し、ネットワーク ディスクを突破して外部接続を禁止する方法

PHP を使用してリファラーを偽造し、ネットワーク ディスクを突破して外部接続を禁止する方法

不言
不言オリジナル
2018-06-21 14:31:421980ブラウズ

この記事では主に、PHP を使用してネットワーク ディスクを突破して外部接続を禁止する方法を紹介します。これで、必要な友人に参照できるようになりました。 #国内一般ネットワーク トラフィック制御のため、ネットワークディスク内のファイルへの外部リンクを禁止します。通常、ネットワーク ディスク内のファイルへのリンクをクリックすると、特別なダウンロード ページが表示され、このページからファイルをダウンロードする必要があります。

たとえば、ナノディスクに置いたファイル http://img.namipan.com/downfile/da333ee178bdad6531d1ec1540cf86277c116b6300887600/02.Paid In Full.mp3

このアドレスは直接ダウンロードしたり、ダウンロードしたりすることはできません。 Web ページ上 プレーヤーで再生し、ダウンロードをクリックしてダウンロード ページに移動します。このファイルを直接ダウンロードまたは再生できるようにするには、リファファーを偽造してサーバーを欺く必要があります。リファファーはナノディスクからのリンクです。

最初に使用される方法は、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 は、実際には相手のサーバーから自分のサーバーにファイルを読み取ってからブラウザに送信します。自身のサーバーへの負荷が高まるだけでなく、ダウンロードの応答速度も非常に遅くなります。これは良い解決策ではありません。

後でマニュアルを読み直して、自分のサーバーの負荷を軽減するだけでなく、相手のサーバーを混乱させることも考えました。ヘッダーの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-Turis_Fratir-02-Wingthors_Hammer.mp3

変換後:

http:// mms .music.krmcn.com/mms.music/namipan/img~~/3a7c64518d46d986283eab73175a8b119305a76480b89200/Equilibrium-Turis_Fratir-02-Wingthors_Hammer.mp3


別の実装コードを添付します:

外部リンクのネットワーク ディスク制限を解除するための最も独創的な PHP コードです。学習して研究したい場合は、コードを直接使用して改善する必要がある場合は、このコードを読み続けてください。参照のみ。

新しいファイル file.php を作成します。次のパラメータは、偽造する必要があるリファファーのターゲット アドレスです。例: 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/Extraction Code/xxx

上記はこの記事の全内容であり、他の関連コンテンツについても役立つことを願っています。 、PHP中国語ネットに注目してください!

関連する推奨事項:

php を使用した CMS での記事クラスの表示の実装


における str_replace 置換の脆弱性の分析php


以上がPHP を使用してリファラーを偽造し、ネットワーク ディスクを突破して外部接続を禁止する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。