Computer-Grafik: Ein Computermonitor und ein Globus auf blauem Hintergrund.

Wie man Image und Video ‚Hotlinking‘ in Nginx blockiert

    Was ist ‚Hotlinking‘ ?

    Hotlinking ist das Einbetten von Inhalten (Bildes-, Videos-, Musik-Dateien) auf einer Website, die auf einer anderen Website gehostet wird, ohne es auf seinem eigenen Server zu speichern. Dadurch werden die Bandbreite und die Ressourcen des ursprünglichen Host-Servers genutzt, ohne dass der Benutzer dafür bezahlt.

    Wann ‚Hotlinking‘ blockiert werden sollte?

    Hotlinking kann in einigen Fällen erwünscht sein, wenn es darum geht, Ressourcen zu teilen oder zu verlinken, um Informationen zu vermitteln oder zu verdeutlichen. Einige Beispiele für erwünschtes Hotlinking sind:

    1. Embedded Content: Es kann erwünscht sein, Ressourcen wie Videos, Audios oder Bilder von einer anderen Website einzubetten, um dem Benutzer eine bessere User Experience zu bieten.
    2. Verweise auf andere Websites: Hotlinking kann verwendet werden, um Verweise auf andere Websites oder Ressourcen bereitzustellen, um dem Benutzer weitere Informationen oder Referenzen zu einem bestimmten Thema zu bieten.
    3. Soziale Netzwerke: In sozialen Netzwerken wie Facebook oder Twitter ist es üblich, dass Benutzer Bilder und andere Ressourcen hotlinken, um sie mit ihren Freunden oder Followern zu teilen.

    Andererseits kann Hotlinking unerwünscht sein, wenn eine der folgenden Bedingungen erfüllt ist:

    1. Verbrauch von Bandbreite und Kosten: Ein hoher Verbrauch an Bandbreite kann durch das Hotlinking von Ressourcen auf fremden Webseiten verursacht werden. Eine große Anzahl von Anfragen auf eine bestimmte Ressource, kann einen signifikanten Verbrauch an Bandbreite auf dem ursprünglichen Server, der für die Übertragung des Contents missbraucht wird, und damit verbundenen Kosten.
    2. Unerwünschte Last auf dem Server: Neben der beanspruchten Bandbreite erzeugen die Anfragen Last auf den Server. Wenn zu viele Benutzer dieselbe Ressource hotlinken, kann dies zu einer Überlastung des Servers führen. Wodurch die Website, auf dem ursprünglichen Server, langsam geladen wird oder sogar ganz ausfällt.
    3. Verlust der Kontrolle: Durch das Hotlinking kann es vorkommen, dass eigene Dateien auf Webseiten eingebunden werden, die unangemessen oder inakzeptabel sind. Da man keine Kontrolle über die Ressource hat, wenn diese auf anderen Websites verwendet wird. Ein solcher Verlust der kann zu negativen Auswirkungen auf die Marke oder das Image führen.

    ‚Hotlinking‘ in Nginx blockieren

    Zunächst muss man sicherstellen, dass das Modul HttpRewriteModule in Nginx aktiv ist, duchsuche dazu die Nginx-Konfigurationsdatei (normalerweise nginx.conf) nach dem Befehl load_module modules/ngx_http_rewrite_module.so;.

    cat nginx.conf | grep -i ngx_http_rewrite_module

    Wenn das Modul nicht aktiviert ist, wird nichts ausgegeben. Dann muss es aktiviert werden, indem man den folgenden Befehl in der nginx.conf-Datei hinzufügt:

    load_module modules/ngx_http_rewrite_module.so;

    Sobald das Modul aktiviert ist, kann man eine Regel in der Nginx-Konfigurationsdatei erstellen, um Image Hotlinking zu verhindern. Dazu muss man – im gewünschten Server Block – das folgende ergänzen:

    location ~ .(gif|png|jpe?g)$ {
       valid_referers none blocked linuxshelltips.com *.linuxshelltips.com;
       if ($invalid_referer) {
          return 403;
       }
    }

    Die Regel überprüft, ob der Referer (die Website, von der das Bild angezeigt wird) in der Liste der gültigen Referer enthalten ist. Wenn der Referer nicht in der Liste enthalten ist, wird ein 403 zurückgegeben und das Bild wird nicht angezeigt. Die Liste sollte entsprechnd angepasst werden und die gewünschten Websites hinzufügt.

    .htaccess

    Es ist auch möglich, Image Hotlinking zu verhindern, indem man eine .htaccess-Datei auf dem Server erstellt, mit folgenden Inhalt:

    RewriteEngine on
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?deinedomain.de [NC]
    RewriteRule .(jpg|jpeg|png|gif)$ - [NC,F,L]

    Diese Regel überprüft, ob der Referer der Website entspricht und verhindert, dass das Bild angezeigt wird, bei anderen. Die Domain in der RewriteCond-Zeile muss entsprechen angepasst werden.

    Test

    Um zu prüfen, ob die Konfiguration greift, gibt es mehrere Möglichkeiten:

    1. Man kann versuchen, das Bild von einer anderen Website aus aufzurufen. Wenn das Bild nicht angezeigt wird, hat die Regel funktioniert.
    2. Man kann das Bild von einer anderen Website aus herunterladen und versuchen, es lokal anzuzeigen. Wenn das Bild nicht angezeigt wird, hat die Regel funktioniert.
    3. Man kann die Server-Protokolle überprüfen, um zu sehen, ob es Versuche gibt, das Bild von einer anderen Website aus aufzurufen. Wenn keine solchen Versuche festgestellt werden, hat die Regel funktioniert.
    4. Man kann den Erfolg der Einschränkung von Image Hotlinking auch mit curl überprüfen:

      curl -I -X GET -e http://www.example.com http://www.example.com/image.jpg
      Der Befehl lädt den Kopfteil (Header) der angegebenen URL und zeigt an, ob das Bild geladen wurde oder ob ein Fehler aufgetreten ist.
      • -I bedeutet, dass nur die Header-Informationen angezeigt werden sollen, anstatt den tatsächlichen Inhalt der Ressource.
      • -X GET ist die Art der HTTP-Anfrage, die gesendet wird, in diesem Fall eine GET-Anfrage, die darauf abzielt, eine Ressource abzurufen.
      • -e http://www.example.com legt den Referer-Header für die Anfrage fest, was für den Server wichtig sein kann, um festzustellen, von welcher Seite die Anfrage gesendet wurde.
      Wenn das Bild erfolgreich geladen wurde, sollte der Befehl etwa folgendes ausgeben:
       HTTP/1.1 200 OK
      Date: Mon, 01 Jan 2018 00:00:00 GMT
      Content-Type: image/jpeg
      Content-Length: 12345

      Wenn die Einschränkung von Image Hotlinking erfolgreich ist, sollte im HTTP-Header ein „403 Forbidden“ angezeigt werden, da der Server den Zugriff auf das Bild verweigert hat. War der Zugriff jedoch erfolgreich, sollte im HTTP-Header ein „200 OK“ angezeigt werden.

    Links

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert