Nginx: Lernen, wie man einen Dienst zum Schutz von Datei-Hotlinks erstellt – Beispiel

Nginx: Lernen, wie man einen Dienst zum Schutz von Datei-Hotlinks erstellt – Beispiel

Vorwort

Jeder weiß, dass viele Websites mittlerweile eine Gebühr für das Herunterladen von Informationen verlangen, sei es Punkte oder Goldmünzen. Es ist sehr selten, dass man es kostenlos bekommt. Wie verhindern diese Websites also das Hotlinking von Ressourcen?

Hier empfehle ich ein Tool, das relativ einfach zu verwenden ist. Nginx selbst bietet secure_link, um die Anti-Hotlink-Funktion zu vervollständigen. Damit können Zeitstempel und Bestätigungscodes zu Serverdateilinks hinzugefügt werden, wodurch Serverdateien vor willkürlichem Herunterladen und Diebstahl geschützt werden.

Timing-Diagramm

Nginx-Konfiguration

Ich werde hier nicht näher auf die Installation von Nginx eingehen. Denken Sie einfach daran, während der Installation ngx_http_secure_link_module zu aktivieren.

./configure --with-http_secure_link_module #Beim Kompilieren von nginx hinzufügen

Erkennung des Installationsabschlusses:

nginx -V

Wenn Folgendes erscheint, war die Konfiguration erfolgreich:

Argumente konfigurieren: --with-http_secure_link_module --prefix=/usr/local/nginx --with-http_stub_status_module

Instanzkonfiguration

Server {
   hören Sie 80;
   Servername download.52itstyle.com;
   Zeichensatz UTF-8;
   Standort / {
     #Hier werden zwei Parameter konfiguriert, einer ist md5 und der andere ist expires
     sicherer_Link $arg_md5,$arg_expires;
     #Das Hash-Format von MD5 ist „secret+URL+expires“, wobei „expires“ die Zeitstempeleinheit s und „url“ die Anforderungsadresse ist „secure_link_md5 52itstyle$uri$arg_e“;
     #Hier ist unser MD5 der Hash, den wir mit der Methode secure_link_md5 berechnet haben. secure_link vergleicht den berechneten Hashwert, um zu sehen, ob er mit unserem MD5-Parameter übereinstimmt, wenn ($secure_link = "") {
       #Wenn die Ressource nicht existiert oder der Hash-Vergleich fehlschlägt, geben Sie 402 zurück;
     }
     wenn ($secure_link = "0") {
       #Timeout fehlgeschlagen, Rückgabe 405;
     }
     #Benennen Sie den Dateinamen add_header Content-Disposition "attachment;filename=$arg_f" um.
     Alias ​​/data/site/down.52itstyle.com/;
   }
   Fehlerseite 500 502 503 504 /50x.html;
   Fehlerseite 402 405 /40x.html;
   Standort = /50x.html {
     Stamm-HTML;
   }
   Standort = /40x.html {
     Stamm-HTML;
   }
}

Parameter

sicherer_link

Syntax: secure_link-Ausdruck;

Standardwert: Keiner

Konfigurationsabschnitt: http, Server, Standort

Der Ausdruck besteht aus einer Prüfsumme und einer Ablaufzeit. Die Prüfsumme wird mit dem MD5-Hashwert des angegebenen Parameters in secure_link_md5 verglichen.

Wenn die beiden Werte inkonsistent sind, ist der Wert der Variable $secure_link leer; wenn die beiden Werte konsistent sind, wird eine Ablaufprüfung durchgeführt; wenn abgelaufen, ist der Wert der Variable $secure_link 0; wenn nicht abgelaufen, ist er 1.

Wenn der Link zeitkritisch ist, wird die Ablaufzeit mithilfe eines Zeitstempels festgelegt, der nach dem MD5-Hashwert durch ein Komma getrennt angegeben wird. Wenn kein Ablaufdatum festgelegt ist, ist der Link unbegrenzt gültig.

sicherer_link_md5

Syntax: secure_link_md5-Ausdruck;

Standardwert: Keiner

Konfigurationsabschnitt: http, Server, Standort

Der Ausdruck gibt die Parameter zur Berechnung des MD5-Hashwerts an, der mit dem in der URL übergebenen MD5-Wert verglichen und überprüft wird. Der Ausdruck enthält im Allgemeinen die URI (z. B. ist die URI von demo.com/s/link /s/link) und das geheime Verschlüsselungsschlüssel-Symbol. Wenn der Link zeitlich begrenzt ist, muss der Ausdruck $secure_link_expires enthalten. Der Ausdruck kann auch Client-Informationen enthalten, z. B. Zugriffs-IP, Informationen zur Browserversion usw.

Java-Backend-Konfiguration

Fall, nur als Referenz:

importiere org.apache.commons.codec.binary.Base64;
importiere org.apache.commons.codec.digest.DigestUtils;
/**
 * Eine verschlüsselte Verbindung herstellen */
öffentliche Klasse SecureLink {
  private statische String-Site = "https://down.52itstyle.com/";
  privater statischer String-Geheimtipp = "52itstyle";
  öffentliche statische Zeichenfolge createLink(Zeichenfolge Pfad,Zeichenfolge Dateiname){
    String time = String.valueOf((System.currentTimeMillis() / 1000) + 300); // 5 Minuten gültig String md5 = Base64.encodeBase64URLSafeString(DigestUtils.md5(secret + path + time));
    String-URL = Site + Pfad + "?md5=" + md5 + "&expires=" + Zeit + "&f="+Dateiname;
    URL zurückgeben;
  }
  öffentliche statische void main(String[] args) {
    //https://down.52itstyle.com/2018101025689452.pdf?md5=FnDYyFzCooI9q8sh1Ffkxg&expires=1539847995&f=Verteilte Seckill-Architektur.pdf
    System.out.println(createLink("2018101025689452.pdf","Verteilte Seckill-Architektur.pdf"));
  }
}

Zusammenfassen

Der gesamte Verschlüsselungsprozess ähnelt ein wenig der symmetrischen Verschlüsselung. Das Backend generiert eine verschlüsselte Adresse basierend auf dem Schlüssel und der Nginx-Proxyserver führt eine Entschlüsselungsüberprüfung durch. Wenn diese erfolgreich ist, wird der Download zugelassen.

Beim Test wurde ein weiteres Problem festgestellt. Der generierte Link läuft manchmal ab. Dies kann an der inkonsistenten Zeit zwischen dem Backend-Server und dem Download-Server liegen. Sie können die Systemzeit synchronisieren.

Wenn Sie Freunde haben, die Punkte-Download-Dienste anbieten, ist dies in der Tat eine gute Wahl. Sie müssen jedoch darauf achten, dass Sie den Schlüssel von Zeit zu Zeit ändern, um ein Auslaufen zu verhindern.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Nginx-Anti-Hotlink- und Anti-Crawler-Konfiguration
  • PHP-Implementierung eines Beispiels für eine Bild-Anti-Hotlink-Cracking-Operation [Lösung des Bild-Anti-Hotlink-Problems/Reverse-Proxy]
  • Führen Sie die folgenden Schritte aus, damit Nginx Anti-Hotlinking konfiguriert.
  • Nginx Cross-Domain-Zugriffsszenariokonfiguration und Anti-Hotlinking-Details
  • So konfigurieren Sie Nginx's Anti-Hotlinking
  • SpringBoot integriert FastDFS + Nginx, um eine tokenbasierte Anti-Hotlinking-Methode zu integrieren
  • Detaillierte Erläuterung der Lösung zum WeChat-Bild-Hotlink-Schutz „Dieses Bild stammt von der öffentlichen WeChat-Plattform und darf nicht ohne Erlaubnis zitiert werden.“
  • Detaillierte Methode zur Verwendung von .htaccess zum Einrichten des Hotlink-Schutzes für Bilder
  • Einfache Lösung für das Problem des Hotlink-Schutzes bei WeChat-Artikelbildern
  • So lösen Sie den Hotlink-Schutz für WeChat-Artikelbilder in PHP

<<:  Fälle, in denen bestimmte Bibliotheken beim Sichern der Datenbank mit mysqldump ausgeschlossen werden

>>:  Natives JavaScript zum Erreichen von Skinning

Artikel empfehlen

Detaillierte Erklärung der Bind-Mounts für die Docker-Datenspeicherung

Bevor Sie diesen Artikel lesen, hoffe ich, dass S...

So visualisieren Sie skizzierte Diagramme in Vue.js mit RoughViz

einführen Ein Diagramm ist eine grafische Darstel...

20 hervorragende Beispiele für die Farbabstimmung auf ausländischen Webseiten

In diesem Artikel werden 20 hervorragende Beispiel...

Tutorial zur Installation und Konfiguration von VMware Tools für Ubuntu

Vor einiger Zeit hat der Blogger das Ubuntu-Syste...

【HTML-Element】Detaillierte Erklärung des Tag-Textes

1. Verwenden Sie grundlegende Textelemente, um In...

Installieren Sie MySQL offline mit RPM unter CentOS 6.4

Verwenden Sie das RPM-Installationspaket, um MySQ...

Detaillierte Erklärung zur Verwendung der vue3 Teleport-Sofortbewegungsfunktion

Die Verwendung der vue3 Teleport-Sofortbewegungsf...

So verwenden Sie Docker Compose zum Erstellen eines FastDFS-Dateiservers

Im vorherigen Artikel wurde ein ausführliches Bei...

Detaillierte Erklärung der JavaScript-Datentypen

Inhaltsverzeichnis 1. Literale 1.1 Numerische Lit...

Detaillierte Erklärung zur Verwendung der Linux-Umleitung

Ich glaube, dass jeder manchmal Daten kopieren un...