Google-Fonts Datenschutz-freundlich verwenden

Beim der mühsamen (aber meines Erachtens sinnvollen) Durchforsten meiner Webseite nach Datenschtz-Lecks bin – so wie viele andere auch – auf die Google-Fonts gekommen, die das von mir verwendete WordPress-Theme einbindet. Dadurch lädt der Browser des Benutzers beim Verwenden meiner Seite CSS- und Font-Daten von Google. Damit hinterlässt der Benutzer ungewollt und unbemerkt eine Datenspur bei Google. Da ich aber nicht so ohne weiteres auf den Font verzichten wollte, habe ich eine andere Lösung gesucht und gefunden, die ich inzwischen auch umgesetzt habe:

Da es ja aus Datentschutz-Sicht nicht grundsätzlich verkehrt ist, einen Google-Font zu verwenden, wäre es eine Möglichkeit, die Daten bei mir direkt abzulegen. Dazu müsste ich aber allerlei Verweise manuell anpassen und außerdem die Daten ggf. aktualisieren.

Daher ist nun meine Grundidee die: Mein ohnehin verwendeter Reverse-Proxy dient auch als Reverse-Proxy für die Google-Fonts. Und damit das auch benutzt wird, werden Verweise auf die Google-Font-Seite beim Ausliefern der CSS und HTML-Files entsprechend umgebaut:

Hinweis: In allen Beispielen habe ich vor die jeweilige Domain ein XX- eingefügt, weil sonst genau der hier beschriebene Ersetzungsmechanismus auch bei der Anzeige dieser Beispiele zuschlagen würde.

Quelltext-Umbau

Aus https://XX-fonts.gstatic.com/foobar wird im ausgelieferten Quelltext https://nerdblog.steinkopf.net/fonts.gstatic.com/foobar. Für die Google-Fonts muss man das gleiche noch mit fonts.googleapis.com machen.

In der Apache-Konfig sieht das so aus:

AddOutputFilterByType SUBSTITUTE text/html application/rss+xml text/plain text/xml text/html;charset=utf-8 text/css
AddOutputFilter SUBSTITUTE php
Substitute "s|//XX-fonts.googleapis.com|//nerdblog.steinkopf.net/fonts.googleapis.com|i"
Substitute "s|//XX-fonts.gstatic.com|//nerdblog.steinkopf.net/fonts.gstatic.com|i"

Wichtig sind in diesem Kontext wohl nur die FIlter-Typen text/html und text/css. Ich verwende SUBSTITUTE aber noch für andere Dinge, daher steht bei mir mehr drin.

Proxying der Aufrufe

Aufrufe an https://nerdblog.steinkopf.net/fonts.gstatic.com/foobar werden nun umgekehrt an https://nerdblog.steinkopf.net/fonts.gstatic.com/foobar weitergeleitet.

Apache-Konfig:

    ProxyRequests Off
    SSLProxyEngine on

    <Location /fonts.googleapis.com/>
        ProxyPreserveHost Off
        SetEnvIf Referer "nerdblog\.steinkopf\.net" localreferer
        Require env localreferer
        ProxyPass "https://XX-fonts.googleapis.com/"
    </Location>
    <Location /fonts.gstatic.com/>
        ProxyPreserveHost Off
        SetEnvIf Referer "nerdblog\.steinkopf\.net" localreferer
        Require env localreferer
        ProxyPass "https://XX-fonts.gstatic.com/"
    </Location>

Man beachte ProxyPreserveHost Off. Das ist hier wichtig, damit der vom Browser aufgerufene Hostname nicht so an den aufgerufenen Google-Host weitergeleitet wird. (Dies ist in anderem Kontext aber sehr wohl wichtig – zumindest bei mir.)

Damit nicht nun jeder von irgendwoher Google-Fonts über meine Webseite abrufen kann, sorgen die beiden Zeilen mit SetEnvIf und Require dafür, dass das Ganze nur funktioniert, wenn der Referer meine Webseite ist. (Hier wird die Idee dazu beschrieben und dazu benutzt “Hotlinking” durch andere Seiten zu verhindern.)

Weitere Möglichkeiten der Nutzung dieser Idee

Neben der Verwendung für die Google-Fonts sind mir noch andere Möglichkeiten eingefallen:

  • s.w.org für die die Anzeige von Smileys.
  • www.gstatic.com
  • Gravatar-Aufrufe (habe ich aber noch nicht ausprobiert).
  • u.v.a.m.

Ich hoffe, dass sich meine Webseite, damit “rundrum” korrekt verhält. Wenn nicht, bitte ich um freundliches Feedback 🙂

Anhang: Der ganze Config-Ausschnitt

    ProxyRequests Off 
    SSLProxyEngine on

    <Location /fonts.googleapis.com/>
        ProxyPreserveHost Off
        SetEnvIf Referer "nerdblog\.steinkopf\.net" localreferer
        Require env localreferer
        ProxyPass "https://XX-fonts.googleapis.com/"
    </Location>
    <Location /fonts.gstatic.com/>
        ProxyPreserveHost Off
        SetEnvIf Referer "nerdblog\.steinkopf\.net" localreferer
        Require env localreferer
        ProxyPass "https://XX-fonts.gstatic.com/"
    </Location>
    <Location /www.gstatic.com/>
        ProxyPreserveHost Off
        SetEnvIf Referer "nerdblog\.steinkopf\.net" localreferer
        Require env localreferer
        ProxyPass "https://XX-www.gstatic.com/"
    </Location>
    <Location /s.w.org/>
        ProxyPreserveHost Off
        SetEnvIf Referer "nerdblog\.steinkopf\.net" localreferer
        Require env localreferer
        ProxyPass "https://XX-s.w.org/"
    </Location>

    AddOutputFilterByType SUBSTITUTE text/html application/rss+xml text/plain text/xml text/html;charset=utf-8 text/css
    AddOutputFilter SUBSTITUTE php

    Substitute "s|//XX-fonts.googleapis.com|//nerdblog.steinkopf.net/fonts.googleapis.com|i"
    Substitute "s|//XX-fonts.gstatic.com|//nerdblog.steinkopf.net/fonts.gstatic.com|i"
    Substitute "s|//XX-www.gstatic.com|//nerdblog.steinkopf.net/www.gstatic.com|i"
    Substitute "s|//XX-s.w.org|//nerdblog.steinkopf.net/s.w.org|i"
    Substitute "s|././XX-s.w.org|\/\/nerdblog.steinkopf.net\/s.w.org|i"

One thought on “Google-Fonts Datenschutz-freundlich verwenden

  1. Edit: Ich habe noch die Beschränkung auf den korrekten Referer und den Anhang mit der ganzen Config ergänzt. Außerdem in den Beispielen XX- eingefügt, um zu verhindern, dass schon hier der Ersetzungsmechanismus alles “zerstört”.

Schreibe einen Kommentar

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