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

Beispiel zum Aktivieren des Brotli-Komprimierungsalgorithmus für Nginx

Brotli ist ein neues Datenformat, das eine um 20 ...

Zusammenfassung der CSS-Methoden zum Löschen von Floats

Float wird häufig im Layout von Webseiten verwend...

So installieren Sie ElasticSearch auf Docker in einem Artikel

Inhaltsverzeichnis Vorwort 1. Docker installieren...

Detaillierte Erklärung der neuen Erfahrung von Vite

Was ist Vite? (Es ist ein neues Spielzeug im Fron...

So konfigurieren Sie zwei oder mehr Sites mit dem Apache-Webserver

So hosten Sie zwei oder mehr Sites auf dem belieb...

Detaillierte Erklärung der grep- und egrep-Befehle in Linux

Vertreter / egrep Syntax: grep [-cinvABC] 'wo...

React-Tipps zeigen Ihnen, wie Sie Probleme mit Hook-Abhängigkeiten beseitigen

Ein sehr häufiges Szenario in react -Projekten: c...

Detaillierte Erklärung der Beziehung zwischen React und Redux

Inhaltsverzeichnis 1. Die Beziehung zwischen Redu...

Eine Frage zum Verständnis mehrerer Parameter des Sortierbefehls in Linux

Der Sortierbefehl wird sehr häufig verwendet, ver...

jQuery-Plugin zur Implementierung des Dashboards

Das jQuery-Plug-In implementiert das Dashboard zu...

Die normale Methode der MySQL-Deadlock-Prüfungsverarbeitung

Normalerweise wird bei einem Deadlock die Verbind...