Maison >développement back-end >tutoriel php >Comment utiliser PHP pour forger un référent afin de percer le disque réseau et d'interdire les connexions externes
Cet article présente principalement comment utiliser PHP pour forger un référent afin de briser l'interdiction du disque réseau sur les connexions externes. Il a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
Réseau domestique général Afin de contrôler le trafic, les liens externes vers les fichiers du disque réseau seront interdits. Cliquer sur le lien vers le fichier sur le disque réseau mènera généralement à une page de téléchargement spéciale, et vous devez télécharger le fichier à partir de cette page. Par exemple, le fichier que j'ai mis dans le nanodisk http://img.namipan.com/downfile/da333ee178bdad6531d1ec1540cf86277c116b6300887600/02.Paid%20In%20Full.mp3 Cette adresse ne peut pas être téléchargée directement ou lisez-le dans le lecteur Web et cliquez sur Télécharger pour accéder à une page de téléchargement. Si vous souhaitez pouvoir télécharger ou lire ce fichier directement, vous devez falsifier le référent et tromper le serveur. Le référent est un lien du nanodisk. La première méthode utilisée consiste à utiliser la fonction intégrée stream_context_create de PHP. Le code est le suivant :function referfile($url, $refer=”) { $opt=array('http'=>array('header'=>”Referer: $refer”)); $context=stream_context_create( $opt); return file_get_contents($url,false, $context); }Mais ce code présente un défaut : file_get_contents lit en fait les fichiers du serveur de l'autre partie vers son propre serveur, puis les envoie à. le navigateur. Non seulement cela augmente la pression sur votre propre serveur, mais la vitesse de réponse du téléchargement est également très lente. Ce n'est pas une bonne solution. Plus tard, j'ai relu le manuel. Je veux réduire la pression sur mon propre serveur et confondre le serveur de l'autre partie. Modifiez simplement les informations Referfer dans l’en-tête. Le code révisé est le suivant :
<?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, l'objectif est atteint. Cette adresse originale : http://img.namipan.com/downfile/3a7c64518d46d986283eab73175a8b119305a76480b89200/Equilibrium-Turis_Fratir-02-Wingthors_Hammer.mp3 Après conversion :
http:// mms .music.krmcn.com/mms.music/namipan/img~~/3a7c64518d46d986283eab73175a8b119305a76480b89200/Equilibrium-Turis_Fratir-02-Wingthors_Hammer.mp3
Ci-joint Un morceau de mise en œuvre code :
Le code PHP le plus original pour briser les restrictions du disque réseau sur les liens externes. Si vous souhaitez apprendre et rechercher, vous pouvez continuer à lire. Si vous souhaitez utiliser le code directement et devez l'améliorer, ce code est à titre de référence. seulement. Créez un nouveau fichier file.php. Le paramètre suivant est l'adresse cible du référent qui doit être falsifiée. Par exemple : 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 test de lien externe d'image de disque réseau (pas fait par moi) : Adresse d'origine : http : //u.115.com/file/f3b7c9046
Adresse du lien externe : http://115.pp.ru/f3b7c9046/02.jpg
Implémentation de l'affichage des classes d'articles dans le CMS via php
Analyse de la vulnérabilité de remplacement str_replace en php
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!