Das DSGVO-konforme WordPress

Ein vieleistiges und damit auch unglaublich wuchtiges Stück Software, das auf den Namen WordPress hört. Das Unternehmen Kinsta hat verschiedenste Statistiken zur Verbreitung von WordPress im Zeitraum von 2011 bis 2019 zusammen getragen. Das für Kenner wenig verblüffende Ergebnis laut heutigem Stand: Etwa 30% aller Webseiten nutzen WordPress als Basis für Ihre Webseite. Und unter allen Webseiten, die durch ein CMS befeuert werden, sind es sogar 60%.

Spätestens seit dem 25. Mai 2018 gibt es Grund zur Sorge. 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. Achja, und dann wäre da noch die Sache mit den Cookies.

Wie und mit welchen Werkzeugen ich diese Fettnäpfchen aus dem Weg geschafft habe möchte ich euch nun anhand dieses relativ 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. Schließlich bin ich kein Jurist, daher sind das hier lediglich Erfahrungen und Empfehlungen im Zuge meiner durchgeführten Anpassungen.

Back to the roots: der Hoster, die Logs, das 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”) 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), manchmal muss man sich jedoch auch direkt mit dem Hoster in Verbindung setzen. Egal, auf welchem Weg du den ADV abschließt: Er ist eine der Säulen für öffentlich zugängliche Webseiten.

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. Das Problem ist das “von wem”. Oft wird die komplette IP-Adresse mitgeloggt und auf unbestimmte Zeit gespeichert. Das kann man hier alternativ auch eine Teil-Anonymisierung der IP vornehmen und die Speicherzeit verkürzen. 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 Webseite-Empfehlungen.

Sicherheit geht vor

Der letzte Check ist einer, der in jedem Fall nicht nur in Erwägung gezogen sondern auch immer vollzogen werden sollte. Es gibt nämlich für mich keinen ersichtlichen 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.

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
Better Search Replace
Entwickler: Delicious Brains
Preis: Kostenlos

Der SSL Insecure Content Fixer kann ebenfalls an einigen Stellen helfen, um Warnungen zwecks Mixed Content abzuschalten, in dem es die Ursachen behebt:

SSL Insecure Content Fixer
SSL Insecure Content Fixer
Entwickler: WebAware
Preis: Kostenlos

Aufbewahrungsfrist von Sicherungen

Du solltest dir ebenfalls die Frage stellen, wie lange du Backups aufbewahren möchtest. Persönlich erachte ich es für sinnlos ein Backup einzuspielen, das bereits den ersten Geburtstag gefeiert hat. Wenn du sie doch so lange aufbewahren möchtest, solltest du dir schon mal einen Masterplan überlegen was du machst, wenn dich doch mal eine Löschanfrage eines Nutzers erreicht (sofern du Daten erhebst)…

Paragrafenreiter: Die 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:

  • Der Kompakte mit Assistent: eRecht24 Datenschutz-Generator, https://www.e-recht24.de/muster-datenschutzerklaerung.html
  • Der Ausführliche mit Voransicht: Dr. Schwenke Rechtsanwaltskanzlei, https://datenschutz-generator.de

Wahlweise kannst du dir natürlich auch einen Anwalt suchen, der speziell für dich eine Datenschutzerklärung formuliert und einen Abmahnschutz bietet. Das geht allerdings ins Geld – sollte klar sein.

Das WordPress-Universum

Welche Tools bietet WordPress von Haus aus?

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 sind kein Teil der “Revolution”. 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 eine richtige Frischzellenkur die in Deutschland fruchtet muss man leider selbst sorgen. Oder zum Glück. Sich auf andere zu verlassen ist bekanntlich oft ein Fehler.

“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, sodnern 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. Das Plugin “Remove IP” leistet hier einen guten Dienst, denn trotz des Alters funktioniert Remove IP noch in aktuellen WP-Versionen:

Remove IP
Remove IP
Entwickler: guido
Preis: Kostenlos

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:

Subscribe to Double-Opt-In Comments
Subscribe to Double-Opt-In Comments
Entwickler: Tobias Herde
Preis: Kostenlos

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
WP GDPR Compliance
Entwickler: Van Ons
Preis: Kostenlos

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:

Disable Emojis (GDPR friendly)
Disable Emojis (GDPR friendly)
Entwickler: Ryan Hellyer
Preis: Kostenlos

Kekfe, welfe 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 (auf meiner Seite lediglich beim Kommentieren zur Wiedererkennung) 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). Außerdem kann zusätzlich ein einfacher Informationsbanner eingeblendet werden, der auf die Datenschutzerklärung verweist. Cookie Notice for GDPR kriegt das gut hin:

Cookie Notice for GDPR
Cookie Notice for GDPR
Entwickler: dFactory
Preis: Kostenlos

Entdecke die Möglichkeiten, aber sei sparsam

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. Und sowieso: Schalte alles ab, was geht. Das kann grundsätzlich nicht schaden.)
  • 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, Baby!

Natürlich möchtest du wissen, wie beliebt dein Content ist. Das kässt sich auch messen ohne dass persönliche Daten aufgezeichnet werden. Statify misst explizit die Aufrufe der Inhalte und erhebt dabei keine weiteren Daten:

Statify
Statify
Entwickler: pluginkollektiv
Preis: Kostenlos

Statify Blacklist
Statify Blacklist
Preis: Kostenlos

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
WP-Appbox
Entwickler: Marcel Schmilgeit
Preis: Kostenlos

Schön muss es sein

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 (oder anderen Anbietern wie Adobe Typekit) ab. Dies erzeugt eine Anfrage vom Rechner des Besuchers an Google, was datenschutzrechtlich fraglich ist, wie wir uns derweil denken können (hoffe ich).

Der Clou: Pauschal gesagt lässt sich eine solche Anfrage unterbinden, in dem man die Web Fonts von Google herunter lädt und lokal auf dem Server ablegt. Sie lassen sich dann per CSS-Anweisung und eventuell Anweisungen in der function.php des Themes nutzen. Bei einigen Themes ist es einfacher, bei anderen schwerer. Nun ist es aber so, dass Anpassungen an der CSS und der functions.php bei Updates grundsätzlich verloren gehen. Hier kann man sich ebenfalls Abhilfe schaffen, und zwar mit “child themes”.

Ich nutze auf meiner WordPress-Seite das Theme Generate Press (Affiliate-Link). Das ist als das Eltern-Theme (“parent”), dem ich mein Kind (“child”) zuordnen werde. Es wird erstellt, indem man eine style.css schreibt, in der die grundsätzlichen Daten des child theme und des parent themes erfasst sind. Außerdem gibt man dort auch den Pfad der zu verwendenden Webfonts an. Bei “Template” muss zwingend die Text Domain des Eltern-Theme stehen (=Ordnername des Themes auf dem Server). Bei “Text Domain” wird der Name gewählt, der das Theme verwenden soll. So wird also auch der Ordner heißen. In meinem Fall heißt das Theme “vk1337”, ebenso die Text Domain:

/*
 Theme Name:   vk1337
 Description:  Das voll knorke Theme
 Author:       vk1337
 Author URI:   https://vk1337.com
 Template:     generatepress
 Version:      1.0
 Text Domain:  vk1337
*/

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

/* muli-italic - latin */
@font-face {
  font-family: 'Muli';
  font-style: italic;
  font-weight: 400;
  src: local('Muli Italic'), local('Muli-Italic'),
       url('https://vk1337.com/webfonts/muli-v13-latin-italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
       url('https://vk1337.com/webfonts/muli-v13-latin-italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}

/* muli-700 - latin */
@font-face {
  font-family: 'Muli';
  font-style: normal;
  font-weight: 700;
  src: local('Muli Bold'), local('Muli-Bold'),
       url('https://vk1337.com/webfonts/muli-v13-latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
       url('https://vk1337.com/webfonts/muli-v13-latin-700.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}

/* muli-700italic - latin */
@font-face {
  font-family: 'Muli';
  font-style: italic;
  font-weight: 700;
  src: local('Muli Bold Italic'), local('Muli-BoldItalic'),
       url('https://vk1337.com/webfonts/muli-v13-latin-700italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
       url('https://vk1337.com/webfonts/muli-v13-latin-700italic.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. Bei mir funktioniert das jedenfalls so:

<?php
  /* 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' );
  
  /* Disable call to google fonts, using system stack and webfonts on server instead (declared in styles.css) */
  add_filter( 'generate_typography_default_fonts', function( $fonts ) {
    $fonts[] = 'Muli';
    return $fonts;
    }
  );
?>

Nun am besten noch einen Screenshot im 4:3-Format anfertigen und diesen als  screenshot.png ablegen. Dein child theme ist nun einsatzbereit.

Entweder du legst jetzt per FTP im Themes-Ordner ein neues Verzeichnich mit der gewählten Text Domain an (bei mir halt “vk1337”) und schmeißt die style.css, functions.php und screenshot.png dort rein, oder du packst 3 Dateien in ein ZIP und lädst es über den WP-Adminbereich hoch. Danach brauchst du das Theme nur noch aktivieren, die Schrift im CUstomizer anwenden und fertig.

Was ist mit Newslettern, WooCommerce und anderen Shopsystemen?

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 Privatleute wie mich schlichtweg uninteressant ist. Solltest du also ein Geschäft betreiben, empfehle ich den Gang zu Fachleuten oder dem Griff zur Fachliteratur.

Überprüfe deine Anpassungen

Mit webbkol kannst du prüfen, ob die von dir vorgenommen Maßnahmen Wirkung erzielen. Es prüft die Seite der eigegebenen 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.

uBlock Origin
uBlock Origin
Entwickler: Raymond Hill
Preis: Kostenlos

uBlock Origin
uBlock Origin
Preis: Kostenlos

uBlock Origin
uBlock Origin
Entwickler:
Preis: Kostenlos

Privacy Badger
Privacy Badger
Entwickler: EFF Technologists
Preis: Kostenlos

Privacy Badger
Privacy Badger
Entwickler: www.eff.org
Preis: Kostenlos

Privacy Badger
Privacy Badger
Entwickler:
Preis: Kostenlos

uMatrix
uMatrix
Entwickler: Raymond Hill
Preis: Kostenlos

uMatrix
uMatrix
Preis: Kostenlos

uMatrix
uMatrix
Entwickler:
Preis: Kostenlos

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.

Schreibe einen Kommentar