Maison >développement back-end >tutoriel php >Qu'est-ce que le hotlinking ? Comment forger un Referer en PHP pour demander des ressources anti-sangsues (avec exemple)
Le contenu de cet article porte sur ce qu'est le hotlinking ? Comment forger un référent en PHP pour demander des ressources anti-sangsues (avec des exemples), il a une certaine valeur de référence, les amis dans le besoin peuvent s'y référer, j'espère que cela vous sera utile.
Certains produits adopteront des mesures anti-sangsues afin d'empêcher l'accès à leurs produits par des liens volés, comme les sites Web de musique et de vidéos dans un écosystème fermé. Ils ont déjà payé des droits d'auteur, donc naturellement ils ne le font pas. Je ne veux pas que vous utilisiez leurs produits gratuitement. Mais comme de nombreuses personnes se spécialisent dans le hotlinking, nous devons également comprendre les principes du hotlinking, de l’anti-hotlinking et de l’évasion de l’anti-hotlinking.
Hotlinks
Citant la définition des hotlinks de l'Encyclopédie Baidu :
Les hotlinks font référence à du contenu que le fournisseur de services lui-même ne fournit pas de services par des moyens techniques contournant d'autres des interfaces utilisateur bénéfiques (telles que des publicités) et fournissent directement aux utilisateurs finaux le contenu des services d'autres fournisseurs de services sur leurs propres sites Web afin de frauder les taux de navigation et de clics des utilisateurs finaux. Le bénéficiaire ne fournit pas ou très peu de ressources, tandis que le véritable prestataire de services ne reçoit aucun avantage.
Hotlinks réguliers
Nous savons que le site Web fournit des services en demandant un fichier html au serveur. Ce fichier contient des fichiers css/js et une balise img/video, ceux-ci. Les ressources statiques lanceront les requêtes dans l'ordre et rempliront l'emplacement spécifié lorsque le fichier HTML est chargé, complétant ainsi le chargement de la page entière.
Donc, tant que nous obtenons l'URL de cette image et l'intégrons dans notre propre fichier html, nous pouvons y accéder sur notre site Web puisque les ressources sont accessibles indépendamment via. différentes requêtes HTTP, nous pouvons donc également filtrer les fichiers html du site d'origine. Il s’agit du hotlinking le plus simple.
Danger : lorsque l'utilisateur visite, il n'accède pas au site Web du lien volé, mais celui-ci occupera toujours les ressources de bande passante du site Web, et l'opérateur devra payer pour la bande passante. Dans le même temps, les utilisateurs n’auront pas accès aux publicités, périphériques, publicités et autres ressources du site Web.
Hotlinking distribué
Le hotlinking distribué est plus compliqué et nécessite le déploiement de programmes spéciaux sur le serveur. Il ne cible pas un seul site Web ou une seule URL, mais. car Toutes les ressources utiles sur l'ensemble du réseau sont volées et stockées dans sa propre base de données, et lorsque l'utilisateur y accède réellement, elles sont entièrement converties en son propre trafic.
Dangers : les ressources que vous obtenez grâce au travail, à l'argent et au paiement des droits d'auteur peuvent être utilisées gratuitement par des sites Web de liens volés, tels que des photos de boutiques en ligne, des périodiques, des séries télévisées, etc. En conséquence, leurs membres et leurs services ne peuvent pas être rentables.
Classification anti-hotlinking
Après avoir compris les méfaits du hotlinking vers le site d'origine, nous devons naturellement utiliser certains moyens pour empêcher ce comportement et sauvegarder nos propres intérêts .
Ajout d'un filigrane
C'est la méthode la plus simple. Utilisez le programme back-end pour ajouter des filigranes aux images et autres ressources par lots. propose également Pour promouvoir leurs propres sites Web, ils peuvent même rechercher activement de tels liens.
Renommer la ressource
Étant donné que le lien hypertexte passe par l'URL spécifiée, cette URL doit contenir le chemin et le nom de la ressource, donc en changeant le fichier ou le nom de le répertoire peut rapidement éviter les liens chauds, mais cela entraînera également l'interruption des ressources en cours de téléchargement.
Limiter les pages de référence
Dans les informations d'en-tête de la requête http, il y a un champ : referer, qui représente à partir de quelle page la requête est initiée, si elle est un séparé S'il est ouvert dans la page ou demandé par le serveur, ce champ sera vide. Par conséquent, nous pouvons définir des restrictions via la valeur du champ référent. Si c'est une page que nous reconnaissons, la ressource sera renvoyée, sinon la demande sera interdite. Cependant, étant donné qu'un fichier sur liste blanche doit être ouvert à chaque fois pour la correspondance d'URL, les performances seront réduites.
Authentification par cryptage
Le client crypte les informations d'authentification de l'utilisateur en les combinant avec le nom de la ressource et utilise la chaîne cryptée comme paramètre de l'URL pour lancer une requête. La ressource demandée ne sera renvoyée qu’après que le serveur l’ait déchiffrée et authentifiée. Cette méthode est principalement utilisée pour empêcher les liens dynamiques distribués.
Programme anti-hotlinking
Parmi les trois méthodes anti-hotlinking ci-dessus, nous utilisons couramment la troisième, qui utilise l'attribut referer pour terminer l'anti-hotlinking aujourd'hui. nous partageons également principalement cette méthode d'anti-sangsue et d'anti-sangsue.
Limitation du programme backend
Ce type de limitation consomme des ressources informatiques côté serveur, il n'est donc pas aussi couramment utilisé que la limitation Nginx.
$from = parse_url($_SERVER['HTTP_REFERER']); if ($from['host']!='xxx.com' && $from['host']!='www.xxx.com') { die('你丫在盗链'); }
Limites de Nginx
Cela peut être fait en modifiant le fichier de configuration nginx. N'oubliez pas de redémarrer nginx une fois la modification terminée :
// 这里指定需要防盗链的资源,如gif/jpg等 location ~* \.(gif|jpg|png|jpeg)$ { // 设置资源的过期时间 expires 30d; // 设置合法的引用页,也就是防盗链的白名单; // none blocked保证用户在新页面打开时依然能够打开,如果不希望用户能够保存删掉这两项 valid_referers none blocked *.hugao8.com *.baidu.com *.google.com; // 对于非法的引用页,可以重写图片,也可以直接返回403或404页面 if ($invalid_referer) { rewrite ^/http://www.it300.com/static/images/404.jpg; #return 404; } }
Politique de référence
Referer 首部包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 Referer 首部识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。
Referer属性出现在请求头中,也在请求头中被设置,但是在浏览器的安全策略里,该值无法被js所指定:
$.ajax({ url: 'http://www.baidu.com', beforeSend(xhr) { // 在发送ajax请求前设置header头部 xhr.setRequestHeader("Referer", "http://translate.google.com/"); xhr.setRequestHeader("User-Agent", "stagefright/1.2 (Linux;Android 5.0)"); }, success(data) { console.log(data); }, error(err) { console.log(err); } });
然而浏览器会报错:
<meta> <a> </a><a></a>
防反盗链
前端JS不能在头部设置Referer字段,和跨域一样是因为浏览器的安全策略,那么同样的在服务端进行请求就不会有这些限制,我们在服务端请求时就可以自由的修改Referer字段。
我们通过简单的PHP例子来完成这个功能:
<?php $url = 'http://t11.baidu.com/it/u=3008889497,862090385&fm=77'; $refer = 'https://www.baidu.com'; $ch = curl_init(); //以url的形式 进行请求 curl_setopt($ch, CURLOPT_URL, $url); //以文件流的形式 进行返回 不直接输出到浏览器 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //浏览器发起请求 超时设置 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); //伪造来源地址 curl_setopt ($ch, CURLOPT_REFERER, $refer); $file = curl_exec($ch); curl_close($ch); header('Content-Type: text/html'); // 对图片进行base64编码,然后返回给前端展示 $file = base64_encode($file); echo "<img src='data:image/jpeg;base64,{$file}' / alt="Qu'est-ce que le hotlinking ? Comment forger un Referer en PHP pour demander des ressources anti-sangsues (avec exemple)" >"; ?>
我们第一次请求注释了伪造来源地址
这一行,第二次请求不注释这一行,这样可以验证执行结果:
总结
盗链和反盗链是一个对立面,技术不断升级,最终的目标也是为了开放资源和保护知识产权。在互联网生态里,我们通过反盗链保护我们的利益,也使用防反盗链的这种方式来扩大我们的内容,无论站在哪一方,都需要做到知己知彼。
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!