>  기사  >  백엔드 개발  >  PHP를 사용하여 리퍼러를 위조하여 네트워크 디스크를 뚫고 외부 연결을 금지하는 방법

PHP를 사용하여 리퍼러를 위조하여 네트워크 디스크를 뚫고 외부 연결을 금지하는 방법

不言
不言원래의
2018-06-21 14:31:421965검색

이 글은 주로 PHP를 사용하여 네트워크 디스크를 뚫고 외부 연결을 금지하는 방법을 소개합니다. 이제는 필요한 친구들이 참조할 수 있습니다. 트래픽을 제어합니다. 네트워크 디스크의 파일에 대한 외부 링크는 금지됩니다. 네트워크 디스크에 있는 파일에 대한 링크를 클릭하면 일반적으로 특별한 다운로드 페이지로 이동하며, 이 페이지에서 파일을 다운로드해야 합니다.

예를 들어 나노디스크에 넣은 파일은 http://img.namipan.com/downfile/da333ee178bdad6531d1ec1540cf86277c116b6300887600/02.Paid%20In%20Full.mp3

이 주소는 직접 다운로드하거나 웹 플레이어에서 재생할 수 없습니다, 클릭하면 다운로드 페이지로 이동합니다. 이 파일을 직접 다운로드하거나 재생하려면 리퍼퍼를 위조하고 서버를 속여야 합니다. 리퍼퍼는 나노디스크의 링크입니다.

첫 번째로 사용할 방법은 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는 실제로 다른 서버에서 자체 서버로 파일을 읽은 다음 이를 브라우저로 보냅니다. , 다운로드도 가능합니다. 응답 속도가 여전히 매우 느리므로 이는 좋은 해결 방법이 아닙니다.

나중에 설명서를 다시 읽어보니 내 서버에 대한 부담을 줄일 뿐만 아니라 상대방 서버에도 혼란을 주기 위해서였습니다. 헤더의 추천인 정보를 수정하세요.

수정된 코드는 다음과 같습니다.

<?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. /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


php


에 대한 str_replace 대체 취약점 분석을 통해 CMS에서 표시 기사 클래스 구현

위 내용은 PHP를 사용하여 리퍼러를 위조하여 네트워크 디스크를 뚫고 외부 연결을 금지하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.