Heim Backend-Entwicklung PHP-Tutorial PHP+Referer realisiert die Verhinderung von Bild-Hotlinks! (Beigefügt mit Beispielcode)

PHP+Referer realisiert die Verhinderung von Bild-Hotlinks! (Beigefügt mit Beispielcode)

Nov 21, 2022 pm 05:25 PM
referer 图片防盗链

Dieser Artikel stellt Ihnen die Probleme im Zusammenhang mit PHP-Anti-Hotlinking vor. Der Hauptinhalt besteht darin, das Referrer-Prinzip und die Implementierungsmethode von Bild-Anti-Hotlinking zu erklären. ~

1 . Bild-Anti-Hotlinking

Auf einigen großen Websites, wie z. B. Baidu Tieba, gelten für die Bilder auf dieser Website Anti-Hotlinking-Regeln, sodass die Verwendung des folgenden Codes zu Fehlern führt. [Empfohlen: PHP-Video-Tutorial]

Einfacher Code:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title></title>
  <link rel="stylesheet" href="">
</head>
<body>
  <!--引用一张百度贴吧的图片-->
  <img  src="/static/imghw/default1.png"  data-src="http://imgsrc.baidu.com/forum/pic/item/03a4462309f79052204229be04f3d7ca7acbd5d5.jpg"  class="lazy"  / alt="PHP+Referer realisiert die Verhinderung von Bild-Hotlinks! (Beigefügt mit Beispielcode)" >
</body>
</html>
Nach dem Login kopieren

Probleme:

PHP+Referer realisiert die Verhinderung von Bild-Hotlinks! (Beigefügt mit Beispielcode)

Der Grund für den Fehler

ist hauptsächlich, dass die Bilder auf dieser Website Anti-Hotlinking-Regeln anwenden. Auch diese Regel ist relativ einfach. Der Hauptgrund dafür ist, dass die Site, wenn sie erfährt, dass eine Anfrage vorliegt, zunächst die Informationen im Anfrageheader ermittelt Im Anforderungsheader wird dann ermittelt, ob die Referrer-Header-Informationen auf seinen eigenen Regeln basieren. Wenn die Anforderungen erfüllt sind, handelt es sich bei den Referrer-Informationen um die Quelladresse der Anforderung für das Bild.

Header-Informationen im Browser anfordern:

(1) Verwenden Sie normalerweise Baidu Tieba, um die Header-Informationen des Bildes anzuzeigen.

PHP+Referer realisiert die Verhinderung von Bild-Hotlinks! (Beigefügt mit Beispielcode)

(2) Header-Informationen meines Codes

PHP+Referer realisiert die Verhinderung von Bild-Hotlinks! (Beigefügt mit Beispielcode)

Ich glaube, die Leser sehen das Ich verstehe, warum mein Code nicht auf das Bild zugreifen kann, zeigt aber eine Warnung zum Hotlinking an, da sich unsere Referrer-Header-Informationen von denen von Baidu Tieba unterscheiden. Wenn meine Anfrage gesendet wird, überprüft die Site die Referer-Header-Informationen Die Quelle stammte nicht von dieser Seite, ich wurde zu einem anderen Bild weitergeleitet.

Konfigurieren Sie den Bild-Hotlink-Schutz für Ihre Site:

(1) Aktivieren Sie das mod_rewrite-Modul im Webserver

#LoadModule rewrite_module module/mod_rewrite.so, //Entfernen Sie das # vor und starten Sie dann den Server neu

( 2) Schreiben Sie in die Website oder das Verzeichnis, die vor Diebstahl geschützt werden müssen, eine .htaccess-Datei und legen Sie die Anti-Hotlinking-Regeln fest

Schritte:

Erstellen Sie eine neue .htaccess-Datei und verwenden Sie „Speichern unter“ in Windows, um diese Datei zu erstellen
Suchen Sie das Handbuch unter „Regelmäßiges Urteilsvermögen verwenden“

, um Regeln in der .htaccess-Datei anzugeben:

Wenn es sich um eine Bildressource handelt und die Referrer-Header-Informationen von dieser Site stammen, verwenden Sie

, um die Regeln wie folgt umzuschreiben:

Unter der Annahme, dass mein Server localhost ist, bedeutet die Regel: Wenn die Anforderung eine Bildressource betrifft, die Quelle der Anforderung jedoch nicht von dieser Site stammt, wird sie zu einem Bild ohne PNG im aktuellen Verzeichnis umgeleitet

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} .*.(jpg|jpeg|png |gif) [NC]
RewriteCond %{HTTP_REFERER} !localhost [NC]
RewriteRule .* no.png

Besuche von localhost:

PHP+Referer realisiert die Verhinderung von Bild-Hotlinks! (Beigefügt mit Beispielcode)

Besuche von anderen Websites:

PHP+Referer realisiert die Verhinderung von Bild-Hotlinks! (Beigefügt mit Beispielcode)

An diesem Punkt haben wir das Wissen über Anti-Hotlinking erlernt, aber beeilen Sie sich nicht, da es sich um einen Anforderungsheader handelt, der natürlich gefälscht werden kann Sprechen Sie über die Anti-Hotlinking-Regeln.

2. Anti-Hotlinking

Mein Server ist mit Bild-Anti-Hotlinking konfiguriert. Wenn wir beim Sammeln von Bildern auf eine Website stoßen, die Anti-Hotlinking verwendet Sie können beim Sammeln von Bildern einen Referer-Header fälschen.

Der folgende Code lädt ein Bild von einer Website herunter, die mit Bild-Hotlink-Schutz konfiguriert ist.

<?php
/**
 * 下载图片
 * @author webbc
 */
require &#39;./Http.class.php&#39;;//这个类是我自己封装的一个用于HTTp请求的类
$http = new Http("http://localhost/booledu/http/apple.jpg");
//$http->setHeader(&#39;Referer:http://tieba.baidu.com/&#39;);//设置referer头
$res = $http->get();
$content = strstr($res,"\r\n\r\n");
file_put_contents(&#39;./toutupian.jpg&#39;,substr($content,4));
echo "ok";
?>
Nach dem Login kopieren

Das Ergebnis des Herunterladens ohne Hinzufügen von Referrer-Header-Informationen:

PHP+Referer realisiert die Verhinderung von Bild-Hotlinks! (Beigefügt mit Beispielcode)

Das Ergebnis des Herunterladens mit Referer-Header-Informationen:

PHP+Referer realisiert die Verhinderung von Bild-Hotlinks! (Beigefügt mit Beispielcode)

Wenn Sie dies sehen, sollten Sie entsprechend erkennen können, wie Sie dies verhindern können Beim Hotlinking handelt es sich tatsächlich um das Hinzufügen von Referrer-Header-Informationen. Wo kann ich dann die Referer-Header-Informationen für jede Site finden? Dies sollte durch Paketerfassung und -analyse herausgefunden werden!

3. Gekapselte HTTP-Anfrageklasse

<?php
/**
 * Http请求类
 * @author webbc
 */
class Http{
  const CRTF = "\r\n";
  private $errno = -1;
  private $errstr = &#39;&#39;;
  private $timeout = 5;
  private $url = null;//解析后的url数组
  private $version = &#39;HTTP/1.1&#39;;//http版本
  private $requestLine = array();//请求行信息
  private $header = array();//请求头信息
  private $body = array();//请求实体信息
  private $fh = null;//连接端口后返回的资源
  private $response = &#39;&#39;;//返回的结果
  //构造函数
  public function __construct($url){
    $this->connect($url);
    $this->setHeader(&#39;Host:&#39;.$this->url[&#39;host&#39;]);//设置头信息
  }
  //通过URL进行连接
  public function connect($url){
    $this->url = parse_url($url);//解析url
    if(!isset($this->url[&#39;port&#39;])){
      $this->url[&#39;port&#39;] = 80;
    }
    $this->fh = fsockopen($this->url[&#39;host&#39;],$this->url[&#39;port&#39;],$this->errno,$this->errstr,$this->timeout);
  }
  //设置请求行信息
  public function setRequestLine($method){
    $this->requestLine[0] = $method.&#39; &#39;.$this->url[&#39;path&#39;].&#39; &#39;.$this->version;
  }
  //设置请求头信息
  public function setHeader($headerLine){
    $this->header[] = $headerLine;
  }
  //设置请求实体信息
  public function setBody($body){
    $this->body[] = http_build_query($body);
  }
  //发送get请求
  public function get(){
    $this->setRequestLine(&#39;GET&#39;);//设置请求行
    $this->request();//发送请求
    $this->close();//关闭连接
    return $this->response;
  }
  //发送请求
  private function request(){
    //拼接请求的全部信息
    $reqestArr = array_merge($this->requestLine,$this->header,array(&#39;&#39;),$this->body,array(&#39;&#39;));
    $req = implode(self::CRTF,$reqestArr);
    //print_r($req);die;
    fwrite($this->fh,$req);//写入信息
    //读取
    while(!feof($this->fh)){
      $this->response .= fread($this->fh,1024);
    }
  }
  //发送post请求
  public function post($body = array()){
    //设置请求行
    $this->setRequestLine("POST");
    //设置实体信息
    $this->setBody($body);
    //设置Content-Type
    $this->setHeader(&#39;Content-Type:application/x-www-form-urlencoded&#39;);
    //设置Content-Length
    $this->setHeader(&#39;Content-Length:&#39;.strlen($this->body[0]));
    //请求
    $this->request();
    $this->close();//关闭连接
    return $this->response;
  }
  //关闭连接
  public function close(){
    fclose($this->fh);
  }
}
//测试get
// $http = new Http("http://news.163.com/16/0915/10/C10ES2HA00014PRF.html");
// $result = $http->get();
// echo $result;
//测试post
/*set_time_limit(0);
$str = &#39;abcdefghijklmnopqrstuvwxyz0123456789&#39;;
while(true){
  $http = new Http("http://211.70.176.138/yjhx/message.php");
  $str = str_shuffle($str);
  $username = substr($str,0,5);
  $email = substr($str,5,10).&#39;@qq.com&#39;;
  $content = substr($str,10);
  $message = "发表";
  $http->post(array(&#39;username&#39;=>$username,&#39;email&#39;=>$email,&#39;content&#39;=>$content,&#39;message&#39;=>$message));
  //sleep(0.1);
}*/
?>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonPHP+Referer realisiert die Verhinderung von Bild-Hotlinks! (Beigefügt mit Beispielcode). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Arbeiten mit Flash -Sitzungsdaten in Laravel Arbeiten mit Flash -Sitzungsdaten in Laravel Mar 12, 2025 pm 05:08 PM

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Mar 14, 2025 am 11:42 AM

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Mar 12, 2025 pm 05:09 PM

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

12 Beste PHP -Chat -Skripte auf Codecanyon 12 Beste PHP -Chat -Skripte auf Codecanyon Mar 13, 2025 pm 12:08 PM

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

Erklären Sie das Konzept der späten statischen Bindung in PHP. Erklären Sie das Konzept der späten statischen Bindung in PHP. Mar 21, 2025 pm 01:33 PM

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Mar 28, 2025 pm 05:12 PM

In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.

Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Apr 01, 2025 pm 03:12 PM

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...

See all articles