この記事では主に、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); }
後でマニュアルを読み直して、自分のサーバーの負荷を軽減するだけでなく、相手のサーバーを混乱させることも考えました。ヘッダーの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('Content-Type:application/force-download'); 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('/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 ネットワークディスク外部リンクテスト 2 (私が行ったものではありません) ): http://gg.org.ru/115.php/Extraction Code/xxx
上記はこの記事の全内容であり、他の関連コンテンツについても役立つことを願っています。 、PHP中国語ネットに注目してください!
関連する推奨事項:
php を使用した CMS での記事クラスの表示の実装における str_replace 置換の脆弱性の分析php以上がPHP を使用してリファラーを偽造し、ネットワーク ディスクを突破して外部接続を禁止する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。