WordPress und Datenschutz nach DSGVO

Das Unternehmen Kinsta hat verschiedenste Statistiken zur Verbreitung von WordPress zusammen getragen. Das für Kenner wenig verblüffende Ergebnis laut heutigem Stand: Etwa 40% aller Webseiten nutzen WordPress als Basis für Ihre Webseite. Und unter allen Webseiten, die durch ein CMS befeuert werden, sind es sogar 64%.

Zuletzt überarbeitet: 23. Februar 2021

Spätestens seit dem 25. Mai 2018 gibt es viele Gründe zum Nachbessern. An diesem Datum trat europaweit die EU-DSGVO in kraft, im Englischen auch mit GDPR bezeichnet. Natürlich nicht ausschließlich für Betreiber von Webseiten mit WordPress, sondern für alle, die beispielsweise auf Tools wie Google Fonts, Statistiken von Jetpack/Matomo/Google Analytics oder allgemein mit Herkunft von fremden Servern einsetzen. Jedoch haben viele Plugins und sogar WordPress selbst diverse datenschutzbedenkliche Aufrufe direkt an Bord.

Wie und mit welchen Werkzeugen ich diese Fettnäpfchen aus dem Weg geschafft habe möchte ich euch nun anhand dieses ausführlichen Artikels zeigen. Er spiegelt die Situation in meiner Umgebung dar und wurde besten Gewissens verfasst. Ob du das alles hier auch für deine eigene Seite umsetzen kannst oder sollst… musst du entscheiden. Das hier sind lediglich Erfahrungen und Empfehlungen im Zuge meiner durchgeführten Anpassungen.

Hoster, Logs, SSL-Zertifikat

Auftragsdatenverarbeitung

In aller Regel steht der Speicher für deine Webseite nicht bei dir Zuhause, sondern in einem Rechenzentrum eines Hosters. Mit diesem Hoster musst du einen ADV („Vertrag zur Auftragsdatenverarbeitung“, manchmal auch AVV genannt) abschließen, da er immer im Auftrag für dich die Daten technisch verarbeiten wird. Manchmal ist der Abschluss eines solchen Vetrags direkt im Kundenbereich möglich, so beispielsweise bei ALL-INKL (Affiliate Link). Manchmal muss man sich jedoch auch direkt mit dem Hoster in Verbindung setzen.

Aktivitätsaufzeichnung

Bleiben wir beim Hoster. Bei normalen Webspace-Accounts werden oft Tools wie AWStats angeboten, die auflisten wann von wem welche Dateien auf dem Server abgerufen wurden. Oft wird die komplette IP-Adresse mitgeloggt und auf unbestimmte Zeit gespeichert. Dies ist nicht zulässig.

Alternativ auch eine Teil- oder komplette Anonymisierung der IP vornehmen und die Speicherzeit verkürzen. Zumidnest sollte dies so sein. Andernfalls halte ich den Webhoster für ungeeignet.

Wer auf solche Daten allerdings wenig Wert legt und nur Basisdaten haben möchte, kann solche Logs auch gänzlich deaktivieren und ein WordPress-Plugin für statistische Zwecke installieren, das keinerlei persönliche Daten aufzeichnet. Mehr dazu gibt es unten in den Empfehlungen.

Sicherheit

Es gibt keinen Grund aus dem man eine Webseite nicht mit SSL verschlüsseln sollte. Das ist heute dank kostenloser Zertifikate von Let’s Encrypt kaum noch ein Problem. Viele Webspace-Anbieter haben den Abruf und die Implementierung solcher Zertifikate je anch Tarif bereits an Bord. Betreiber, die ihre eigenen Server hosten, sind in der Regel versiert genug sich ebenfalls mit SSL zu versorgen. Ob nun manuell, oder mit Hilfe eines Panels wie ISPConfig.

Aber auch ohne Lets Encrypt gibt es mittlerweile SSL Zertifikate günstig zu haben, teilweise für unter 30 Euro pro Jahr. Rabatte gibt es oft, wenn man längere Laufzeiten wählt. Ich habe mich beispielsweise für eines mit 5 Jahren Laufzeit entschieden.

Ein Mal installiert muss WordPress es nur noch beigebracht werden, dass SSL durchgängig genutzt werden soll. Ob du dich nun manuell durch die Datenbank kämpfst, oder Plugins nutzt die die URLs für dich checken, bleibt dir überlassen.

Better Search Replace kann für dich sämtliche URLs in der WP-Datenbank umschreiben. Es empfiehlt sich jedoch immer vorher eine Sicherung der Datenbank anzulegen.

Better Search Replace

Der SSL Insecure Content Fixer kann ebenfalls an einigen Stellen helfen und zeigt dir, wo du nochmal ran musst.

Datenschutzerklärung

Die Daten auf deiner Webseite erhebst und verarbeitest du grundsätzlich auf Grundlage einer Datenschutzerklärung. Für private Seiten eignen sich Generatoren, die viele Klauseln und Anwendungsszenarien abdecken. Welchen du verwendest, bleibt dir überlassen. Beide sind grundsätzlich kostenfrei:

Wahlweise kannst du dir natürlich auch einen Anwalt suchen, der speziell für dich eine Datenschutzerklärung formuliert und einen Abmahnschutz bietet.

WordPress-Universum

Welche Tools bietet WordPress?

Knüpfen wir mal direkt bei Löschanfragen und Datenerhebung an. Nun, ich sag’s mal so: WordPress bietet seit Version 4.9.6 rudimentäre Lösungen zur Umsetzung der DSGVO an, die allenfalls gut gemeint sind.

  • Datenexport und -löschung für Nutzeranfragen
  • Datenschutzerklärung mit Beispieltext
  • Link zur Datenschutzerklärung auf der Loginseite

Wie schon Jennifer Rostock sang: Das Gegenteil von gut ist gut gemeint. Denn andere im Core verankerte Features wie Gravatar, Emoji-Umwandlung und das Embedding pfeifen auf Datenschutz.

Der Grund ist schlicht erklärt: Die globale WordPress-Community berücksichtigt nur wenig lokale Anfordernisse an den Datenschutz. Bei den Leuten von Übersee (die sich für andere Länder eh nicht interessieren, weil sie sich für die größten und besten halten), mögen die Werkzeuge ja noch ausreichend sein. Für einen sicherheitsbewussten Betrieb innerhalb der EU muss man allerdings selbst sorgen.

W.P. nach Hause telefonieren

Einige Dinge sind nach wie vor strittig, insbesondere das Einbinden von Inhalten (Instagram, YouTube und Posts anderer Netzwerke) oder die Verarbeitung von Kommentaren. Empfehlen tue ich grundsätzlich überhaupt keine Fremdinhalte einzubetten, sondern im Zweifelsfalle nur darauf zu verlinken. Und wenn man schon was einbetten möchte, sollte es definitiv eine Zwei-Klick-Lösung sein, mit der Nutzer den Abruf der Inhalte explizit zustimmen müssen.

Außerdem telefoniert jede WordPress-Seite standardmäßig nach Hause. Sei es für Gravatare oder den systemübergreifenden Emoji-Support. Viele Dieser Krankheiten lassen sich heilen. Auch hierfür habe ich die passenden Plugins organisiert und eingerichtet.

Wenn Beiträge auf deiner Webseite kommentiert und abonniert werden können sollte dafür gesorgt werden, dass die IP-Adressen gar nicht erst aufgezeichnet werden. Mit einem Codeschnipsel in der function.php deines Child Themes wird hier eine Vorkerhrung getroffen. Wie du ein Child Theme erstellst, darauf gehe ich in Abschnitt 4 ein.

/* Do not store IP addresses in comments */
function wpb_remove_commentsip( $comment_author_ip ) {
return '';
}
add_filter( 'pre_comment_user_ip', 'wpb_remove_commentsip' );

Sofern du bereits Kommentare auf deiner Webseite hast sind rückwirkend alle IP-Adressen aus der Datenbank zu entfernen. Das musst du leider einmalig manuell machen, indem du dich ins phpMyAdmin einloggst und folgenden Befehl in der Datenbank durchführst. Das xx ist dabei mit dem gewählten Datenbank-Präfix zu ersetzen, das du bei der WordPress Installation gewählt hast.

UPDATE xx_comments SET comment_author_IP = ' ';

Möchte der Nutzer neue Kommentare abonnieren, so sieht die Gesetzgebung einen Double-Opt-In vor. Mit Subscribe to Double-Opt-In Comments wird dem Nutzer eine E-Mail zur Bestätigung gesendet:

Das Grundsätzliche Bestätigen der Datenschutzklauseln, die du dir zwischenzeitlich durch einen der Generatoren organisiert und eingebunden hast, übernimmt WP GDPR Compilance:

WP GDPR Compliance
Price: Free

Moderne Betriebssysteme rendern Emojis bereits von Haus aus. Es braucht hierfür keine Skripte, die zur WordPress-Basis funken. Ein Mal installiert und aktiviert deaktiviert Disable Emojis diese Anfrage:

Damit keine Verbindung zu Gravatar aufgebaut wird, sollte unter Einstellungen > Diskussion der Punkt Avatare anzeigen deaktiviert sein

Kekfe???

Die DSGVO hat noch keine klaren Regeln vorgeschrieben, wie Cookies zu behandeln sind. Das kommt wohl erst mit der ePrivacy-Richtlinie. Bis dahin gilt: Setze keinesfalls ohne Hinweis und Einverständnis des Nutzers Cookies – und schon gar nicht wenn sie funktionell gesehen nicht notwendig sind.

Das oben genannte WordPress-Plugin WP GDPR Compilance bietet eine Zustimmungs-Bannerlösung an. Wer es sehr komplex und anpassungsfähig mag, der kann auch einen Blick auf das kostenpflichtige Plugin Borlabs Cookie werfen.

Wer so wie ich grundsätzlich auf das Setzen von Cookies verzichtet oder/und nur an bestimmten Stellen einen setzt kann gänzlich auf solch eine Zustimmungslösung verzichten und stattdessen an entsprechender Stelle eine Checkbox mit Verweis auf die Datenschutzerklärung setzen (das kann das zuvor erwähnte WP GDPR Compilance übernehmen).

Möglichkeiten sparsam einsetzen

Bisher bin ich nur auf den Core eingegangen, aber WordPress wäre nicht WordPress, wenn es nicht eine Fülle an Erweiterungsmöglichkeiten gäbe. Es gibt allerdings ein paar Grundsätze, die ich folgend aufliste, aber zuvor noch ein Leitsatz: Weniger ist mehr!

  • Werden Tool „X“ und Plugin „Y“ wirklich auf meiner Seite benötigt?
  • Was genau wird da eigentlich beim Seitenaufruf geladen? (Sei musstrauisch: Wenn anhand deines gesunden Menschenverstands eine Einstellung nicht gut ist, solltest du sie deaktivieren.)
  • Eine Funktion lässt sich beispielsweise in einem Plugin nicht abschalten? Wirf’s in die Tonne.
  • Ist ein Plugin eventuell kostenlos, weil es Open Source ist (gut!), oder weil mit Datensammlung bezahlt wird (schlecht => weg damit)?
  • Kein Tracking, keine Facebook-Pixel, keine Social Plugins.
  • Keine Werbeanzeigen von Netzwerken (wie z.B. AdSense)

Zahlen und Fakten

Natürlich möchtest du wissen, wie beliebt dein Content ist. Das lässt sich auch messen ohne dass persönliche Daten aufgezeichnet werden. Koko Analytics misst explizit die Aufrufe der Inhalte und erhebt dabei keine weiteren Daten. Die Checkbox zum Ablegen eines Cookies zur Wiedererkennung sollte in den Einstellungen deaktiviert bleiben.

Koko Analytics
Price: Free

Alternativ ist auch Statify eine Wahl. Allerdings verlangsamt es den Seitenaufruf enorm und das WP Dashboard lädt häufig nicht. Zumindest bei meiner Installation.

Statify
Price: Free

Statify Filter
Price: Free

Externe Verlinkungen

Wer gerne Mal auf Stores verlinkt (iOS, Android, Microsoft, Chrome, Mozilla, Steam, GOG oder wie ich hier auf das WordPress Plugin Directory), dem ist mit WP Appbox geholfen. Damit lassen sich die „Apps“ und Plugins übersichtlich darstellen und verlinken. Außerdem gibt es Anzeigeoptionen, die Möglichkeit Bilder auf dem eigenen Server zu cachen und Google Fonts für die Darstellung abzuschalten:

WP-Appbox
Price: Free

Schönheit ohne Datensammelwut

Wir alle lieben es, auch wenn man sich dessen vielleicht nicht bewusst ist: Google Fonts bietet eine Vielzahl an Schriften, die mit nur wenigen Zeilen Code abgerufen werden und deinen Text dann im entsprechenden Schriftsatz darstellen.

Der Haken: Von Haus aus rufen viele Themes die Schriftarten von Google Fonts ab. Dies erzeugt eine Anfrage vom Rechner des Besuchers an Google, was datenschutzrechtlich fraglich ist, wie wir uns derweil denken können (hoffe ich).

Pauschal gesagt lässt sich eine Anfrage an Google Fonts unterbinden, in dem man sie herunter lädt und auf dem eigenen Server ablegt und auch dort abfragen lässt.

Child Theme erstellen

Anpassungen an der CSS und der functions.php, die dafür vorgneommen werden müssen, gehen bei Updates grundsätzlich verloren. Hier kann man sich Abhilfe schaffen, und zwar mit „child themes“.

Ich nutze auf meinen WordPress-Seiten meist das Theme GeneratePress (Affiliate Link). Aus diesem erstelle ich also grundsätzlich immer ein Child Theme.

Zum Erstellen von Child Themes gibt es unzählige kostenfreie Plugins. Ich empfehle gern dieses hier.

Child Theme Generator

Erstellt damit das Child Theme. Anschließend könnt ihr im Theme-Editor von WordPress die beiden relevanten Dateien bearbeiten.

Schriftarten von Google Fonts herunterladen

Ich arbeite hier mit dem Verzeichnis /webfonts. Das ist der Ordner, in dem die Schriftsätze alle liegen werden. Tragt beim Download über den google-webfonts-helper also den gleichen Namen ein, wenn ihr meiner Anleitung folgen möchtet.

Zum google-webfonts-helper: https://google-webfonts-helper.herokuapp.com/fonts

  1. Wähle die erste Schriftart mithilfe der Suchfunktion oben links auf der Seite aus.
  2. Klicke dann die charsets und styles aus, die du benötigst
  3. Wähle als Option bei Copy CSS besser Modern Browsers aus. Niemand mag alte Browser. Außerdem verschlankt es den Code.
  4. Bei „Customize folder prefix (optional)“ trage /webfonts/ ein.
  5. Kopiere den Code in die style.css deines Child Themes.
  6. Lade die Schriftart herunter, entpacke das Archiv und lade die Dateien per FTP in den Ordner webfonts, den du einmalig im Wurzelverzeichnis anlegst.
  7. Wiederhole die Schritte für weitere Schriftarten, sofern du mehr als einen Google Font benutzen möchtest.

In diesem Beispiel habe ich zwei Schriftarten deklariert.

/* montserrat-300 - latin */
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 300;
src: local(''),
url('/webfonts/montserrat-v15-latin-300.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('/webfonts/montserrat-v15-latin-300.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}

/* sacramento-regular - latin */
@font-face {
font-family: 'Sacramento';
font-style: normal;
font-weight: 400;
src: local(''),
url('/webfonts/sacramento-v8-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('/webfonts/sacramento-v8-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}

Außerdem braucht es nun noch die functions.php, in der ich anweise, dass nach dem Laden der Eltern-CSS-Eigenschaften die des eigenen Themes geladen werden sollen. Zusätzlich werden die zuvor definierten Webfonts in den „system stack“ geladen.

Das bewirkt, dass diese im Customizer direkt gewählt werden können und Google nicht mehr anfragen. Das funktioniert mit so genannten Filtern.

Wie das Laden lokal abgelegter Webfonts bei deinem Theme funktioniert funktioniert, musst du selbst beim Hersteller in Erfahrung bringen. Sofern du das obere Plugin zur Erstellung eines CHild Themes genutzt hast, brauchst du diesen Code nicht. Bei GeneratePress (samt Child Themes) funktioniert das jedenfalls so:

/* Load parent themes CSS first */
function child_theme_styles() {
wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
wp_enqueue_style( 'child-theme-css', get_stylesheet_directory_uri() .'/style.css' , array('parent-style'));
}
add_action( 'wp_enqueue_scripts', 'child_theme_styles' );

Schriftarten hinzufügen und Google Fonts blocken

Weiterhin müssen die lokalen Schriftarten aufgerufen werden.

/* Using system stack and webfonts on server (declared in styles.css) */
add_filter( 'generate_typography_default_fonts', function( $fonts ) {
  $fonts[] = 'Montserrat';
  $fonts[] = 'Sacramento';
  return $fonts;
  }
);

Mithilfe des folgenden Codeblocks entfernt man sämtliche Aufrufe zu Google Fonts und die entsprechenden Einträge aus dem Customizer.

/* Remove Google Fonts in Customizer */
add_action( 'admin_init', function() {
    add_filter( 'generate_google_fonts_array', '__return_empty_array' );
} );

add_action( 'wp_enqueue_scripts', function() {
    wp_dequeue_style( 'generate-fonts' );
} );

Bonus: Elementor von Google Fonts befreien

Der Site Builder Elementor verfügt standardmäßig über eine eigene Schriftarten-Verwaltung und missachtet die Einstellungen des Themes, sofern man sie nicht abschaltet.

Nichts desto trotz muss man in jedem Fall dafür sorgen, dass auch in Elementor keine Einträge von Google Fonts mehr verfügbar sind.

Dafür ist der folgende Codeschnipsel der functions.php des genutzten Child Themes hinzuzufügen:

/* Remove Google Fonts in Elementor */
add_filter( 'elementor/frontend/print_google_fonts', '__return_false' );

Überprüfung

Mit webbkol kannst du prüfen, ob die von dir vorgenommen Maßnahmen Wirkung erzielen. Es prüft die Seite der eingegebenen URL (keine Unterseiten). Wie genau das Prüfverfahren ist, steht in Deutsch auf der Seite.

Außerdem können auch Browser-Addons Auskunft darüber geben, ob Anfragen getätigt werden und um welche es sich handelt.

Chrome

uBlock Origin
Price: Free

Privacy Badger
Price: Free

uMatrix
Price: Free

Firefox

uBlock Origin
Price: Free

Privacy Badger
Price: Free

uMatrix
Price: Free

Opera

uBlock Origin
Price: Free

Privacy Badger
Price: Free

uMatrix
Price: Free

Was ist mit anderen Dingen?

Darauf gehe ich hier nicht ein. Nicht nur, weil es durch Vielschichtigkeit und viele weitere gesetzliche Hürden den Rahmen sprengen würde, sondern auch weil es für mich schlichtweg uninteressant ist. Solltest du hier Handlungsbedarf haben empfehle ich den Gang zu Fachleuten oder dem Griff zur Fachliteratur.

Schlussworte

Damit bin ich am Ende meines Exkurses. Es wäre toll, wenn er dir bei deinem Vorhaben behilflich sein konnte. Lass es mich einfach in den Kommentaren wissen. Auch wenn du andere Kommentare oder Anpassungen parat hast.