Das Hotlinking von Premium-Schriften verhindern

Vielleicht hab ihr auch eine Website, die eine „Premium-Schriftart“ verwendet. Das Laden von einem CDN, vielleicht sogar mit externem JavaScript, ist für die Performance und den Datenschutz dabei oft nicht ideal. Deshalb möchtet ihr die Schriftarten wahrscheinlich auf eurem Server hosten. Viele Websites, auf denen ihr Schriftarten kaufen könnt, haben vermutlich eine Lizenzvereinbarung, die in etwa so lautet:

Im Rahmen dieser Lizenz muss die Schriftart angemessen gesichert werden, um zu verhindern, dass unbefugte Websites, die sich der direkten Kontrolle des Lizenznehmers entziehen, auf die Schriftartensoftware zur Anzeige von Inhalten zugreifen, einschließlich Hotlinking oder direktem Zugriff über Webserver-Integration.

Aber wie können wir das Hotlinking verhindern? Das hängt stark vom Webserver und der Infrastruktur ab, die ihr verwendet. Werfen wir mal einen Blick auf ein paar unterschiedliche Ansätze.

Verwendung einer Web Application Firewall wie der Cloudflare WAF

In einem Projekt, in dem ich diese Anforderung hatte, war es nicht möglich, die Serverkonfiguration zu ändern. Aber die gesamte Website befand sich hinter Cloudflare. In Cloudflare gibt es eines spezielle Hotlink Protection, die aber nur für einige wenige Bildformate das Hotlinking unterbindet.

Nach einigen Versuchen habe ich eine Regel gefunden, die auch für Webfonts funktioniert. Ihr könnt sie in der Benutzeroberfläche von Cloudflare unter „Sicherheit -> WAF“ konfigurieren:

Screenshot der Benutzeroberfläche zum Bearbeiten einer Cloudflare WAF-Regel mit dem Namen „Hotlink Protection für Schriften“. Die Steuerelemente wurden verwendet, um die Regel zu erstellen, die auch im Code unten gefunden werden kann.

Alteranativ könnt ihr den Link „Ausdruck bearbeiten“ verwenden und den folgenden Code einfügen:

(http.request.full_uri enthält "/fonts/" und nicht http.referer enthält "example.com" und nicht cf.client.bot und nicht http.user_agent enthält "PTST")

Diese Regel verhindert Hotlinking von jedem Pfad, der den Ordner /fonts/ enthält. Dies könnte etwas zu streng sein. Es könnte auch andere (freie) Schriftarten blockieren, oder solche, die in Plugins gespeichert sind. Ihr könntet stattdessen einen spezifischeren Ordner wie wp-content/themes/euer-theme-slug/assets/fonts/ im Feld „Vollständige URI“ verwenden.

Das andere Feld, das ihr anpassen müsst, ist das Feld „Referer“. Hier verwenden ihr eure eigenen Domänennamen. Es ist wichtig, es auf „enthält nicht“ (oder ähnlich) zu setzen, da wir Anfragen blockieren wollen, die „nicht“ von unserer Domain kommen.

Die Einstellungen „Bekannte Bots“ und „User Agent enthält nicht PTST“ verhindern, dass die Regel angewendet wird, wenn eure Website von Suchmaschinen oder dem Performance-Tool webpagetest.org aufgerufen wird. Die Seitenaufrufe dieser Dienste werden dann also nicht beeinträchtigt.

Schließlich wählt ihr unter „Dann folgendermaßen verfahren…“ die Aktion „Blockieren“ aus, die das Laden der Schriftart mit einem Hotlink verhindert.

Verwendung einer nginx-Konfiguration

Wenn ihr nginx als Webserver verwendet, könnt ihr mit dem ngx_http_referer_module ebenfalls das Hotlinking auf die Premium-Schriften blockieren. Hierzu fügt ihr die folgende location zu eurer Konfiguration hinzu:

location /fonts/ {
    valid_referers example.com www.example.com;
    if ($invalid_referer) {
        return 403;
    }
}

Ihr könnt hier, wie in der Dokumentation beschrieben, statische Domänennamen oder einen regulären Ausdruck und einige andere Werte für die valid_referers verwenden.

Verwendung einer Apache-Konfiguration

Wenn ihr Apache verwendt, was viele Shared-Hosting-Anbieter immer noch tun, könnt ihr in der .htaccess-Datei im Hauptverzeichnis der Website folgendes hinzufügen:

<IfModule mod_rewrite.c>
  RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com [NC]
  RewriteCond %{REQUEST_URI} /fonts/
  RewriteRule . - [F,NC]
</IfModule>

Auch hiermit wird das Hotlinking von anderen Domains blockiert. Weitere RewriteCond Werte findet ihr in der Apache-Dokumentation.

Einschränkungen

Sowohl das Beispiel für nginx, als auch das für Apache, beachten keine Suchmaschinen-Bots und Performance-Tools. Es wäre zwar möglich, sie nicht zu blockieren, doch das wäre sehr viel komplexer in der Einrichtung.

Ihr solltet euch auch bewusst sein, dass all diese Lösungen nicht „sicher“ sind, da sie Hotlinking nicht wirklich verhindern können. Wenn andere Premium-Schriftarten, die auf eurem Server gespeichert sind, für deren fremde Websites verwenden möchte, könnten sie einen „Proxy“ schreiben und den HTTP_REFERER Header so manipulieren, dass es so aussieht, als kämen die Anfragen von eurem Server. Aber ich würde sagen, dass eine der in diesem Blogbeitrag vorgestellten Maßnahmen „angemessen sicher“ sein sollte, wie es in der Lizenzvereinbarung heißt. Da ich euch aber keinen juristischen Rat geben kann, fragt besser bei Schriften-Shops nach, ob eure Maßnahmen für diese ausreichend sind.

Fazit

Die Verwendung einer schönen Premium-Schriftart kann eure Website von anderen abheben. Wenn ihr sie auf eurem eigenen Server hostet, verbessert dies die Ladegeschwindigkeit und den Datenschutz. Lest aber immer in der Lizenzvereinbarung nach, ob ihr eine Anforderung für das Unterbinden von Hotlinking findet. Andernfalls könnten ihr in echte Schwierigkeiten geraten.

Veröffentlicht von

Bernhard ist fest angestellter Webentwickler, entwickelt in seiner Freizeit Plugins, schreibt in seinem Blog über WordPress und andere Themen, treibt sich gerne bei den WP Meetups in Berlin und Potsdam herum und läuft nach Feierabend den ein oder anderen Halbmarathon.

Schreibe einen Kommentar

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