Das Modul zum Einbinden einer Datenschutzerklärung in PHP-Homepages wird vom Arbeitskreis Internet angeboten. Es wurde von Kai Dusek entwickelt.

Generell zu beachten sind die Basisinformationen zum Datenschutz.

Datenschutz-Modul in PHP

Um die App in eine Seite einzubinden, muss folgender Code auf der Seite (z.B. datenschutz.inc) eingebunden werden:

dlrgModul("datenschutz");

Dieser Eintrag bindet die Datenschutzerklärung in maximaler Ausprägung in die entsprechende Seite ein. Da diese im Allgemeinen zu umfangreich ist, kann die Seite mittels Filter entsprechend angepasst werden.

Anzeigen und Ausblenden von Überschriften: Der Filter

Der Inhalt der zu erzeugenden PHP-Datenschutzseite muss konfiguriert werden, da es kein Wissen über den Inhalt der Webseite besitzt. Der wichtigste Parameter ist daher der Filter. Mit ihm wird explizit festgelegt, welche Kapitel angezeigt werden sollen und welche nicht. Wenngleich der Filter nicht hierarchisch strukturiert ist, wirkt er sich dennoch auf alle Unterkapitel aus, d.h. wenn eine Kapitel der Ebene 1 ausgeblendet werden soll (mit false inaktiviert wird), werden alle darunter liegenden Kapitel der Ebenen 2, 3,... ebenfalls nicht angezeigt. Wenn ein Kapitel der Ebene 1 angezeigt werden soll (mit true aktiviert wird), kann separat entschieden werden, welche Kapitel der Ebene 2 angezeigt oder ausgeblendet werden sollen.

Der Filter wird wie folgt definiert:

$_DLRG_CONF["datenschutz"]["filter"] = [
  "Datenschutz auf einen Blick" => true,                     // Kapitel anzeigen
    "Datenerfassung auf unserer Website" => true,
    "Analyse-Tools und Tools von Drittanbietern" => false,   // Unterkapitel unterdrücken
  "Allgemeine Hinweise und Pflichtinformationen" => true,
    "Datenschutz" => true,
    "Widerruf Ihrer Einwilligung zur Datenverarbeitung" => true,
    "Beschwerderecht bei der zuständigen Aufsichtsbehörde" => true,
    "Recht auf Datenübertragbarkeit" => true,
    "SSL- bzw. TLS-Verschlüsselung" => true,
...
  "Plugins und Tools" => false,                              // ganzes Kapitel unterdrücken
    "YouTube" => false,
    "Vimeo" => false,
    "Google Web Fonts" => false,
    "Google Maps" => true,                                   // Google Maps wird implizit unterdrückt
    "SoundCloud" => false,
    "Spotify" => false
];

In diesem Beispiel wird die erste Kapitelüberschrift "Datenschutz auf einen Blick" mit dem Unterkapitel "Datenerfassung auf unserer Website" aktiviert. Das Unterkapitel "Analyse-Tools und Tools von Drittanbietern" wird dagegen nicht angezeigt.

Das Kapitel "Plugins und Tools" wird ausgeblendet und damit alle Unterkapitel. Es ist also gleichgültig, wie die Kapitel "YouTube", "Vimeo",... definiert sind.

Ein Kapitel, das nicht explizit definiert ist, ist automatisch aktiv.

Wie bereits erwähnt, ist der Filter nicht hierarchisch gegliedert.

Automatische Erstellung einer Filterkonfiguration

Um die Definition der Filter einfacher zu gestalten, gibt es die Möglichkeit, eine Filterkonfiguration aller Kapitelnamen auf einer Webseite generieren zu lassen. Das kann entweder explizit über eine eigene nicht-öffentliche Webseite geschehen oder durch Anhängen des Parameters config an das Ende der Datenschutz-URLs. Dadurch wird die Konfiguration an das Ende der Datenschutzseite angehängt.

Wenn also der URL der eigenen Datenschutzseite https://musterhausen.dlrg.de/index.php?inc=datenschutz lautet, wird mit Aufruf des URLs https://musterhausen.dlrg.de/index.php?inc=datenschutz&config die Filterkonfiguration an das Ende der Seite angehängt.

Die generierte Filterkonfiguration enthält wahlweise alle vorhandenen Überschriften, wobei die bereits konfigurierten je nach Filter auf true oder false gesetzt sind und neue (also nicht-konfigurierte) Seiten entsprechend markiert sind.

Alternativ kann man auch per Modulkonfiguration den Filter nur für die Kapitel generieren lassen, die nicht schon konfiguriert sind.

Anzeigemodus

Man kann per Konfiguration unterschiedliche Darstellungsformen konfigurieren. Zur Verfügung stehen:

Letztere sind vorrangig für die Entwicklung und Pflege gedacht.

Der Modus wird wie folgt konfiguriert:

$_DLRG_CONF["datenschutz"]['anzeige_modus'] = "text"; // toc, text, config, dump

Das Inhaltsverzeichnis

Das Inhaltsverzeichnis listet alle als aktiv konfigurierten Kapitel in hierarchischer Form aus. Dabei wird davon ausgegangen, dass sich die Kapitel auf der selben Seite wie das Inhaltsverzeichnis befindet (anderenfalls funktioniert die Verlinkung auf die Kapitel nicht).

Per Modulparameter kann man konfigurieren, bis zu welcher Kapitelüberschrift das Inhaltsverzeichnis generiert werden soll:

$_DLRG_CONF["datenschutz"]["toc_level"] => 2;

Hiermit werden nur die ersten beiden Überschriftenebenen angezeigt.

Die Datenschutzerklärung

Die eigentliche Datenschutzerklärung wird mit dem ["anzeige_modus"]="text" generiert. Dabei hat man die Möglichkeit, Texte durch reguläre Ausdrücke zu ersetzen oder eigene Kapitel einzufügen.

Das Inhaltsverzeichnis berücksichtigt sowohl Textersetzung, als auch neue Kapitel.

Textersetzungen durch reguläre Ausdrücke

Man hat die Möglichkeit, einzelne Worte oder ganze Sätze durch eigene Texte ersetzen zu lassen. Technisch wird der HTML-Text nach HTML-Textfragmenten durchsucht (reguläre Ausdrücke sind möglich) und durch andere HTML-Fragmente ersetzt, z.B.

$_DLRG_CONF["datenschutz"]["text_mapping"] = [
  "<strong>" => "<font size=\"100\">",           // ersetzt "fett" durch "groß"...
  "</strong>" => "</font>",                      // ...und das dazugehörige Ende-Tag
  "DSGVO" => "Datenschutzgrundverordnung",       // Ersetzt Abkürzung durch Langform
  "SSL-.*TLS" => "SSL- und TLS",                 // ersetzt u.a. "SSL- bzw. TLS" durch "SSL- und TLS",
                                                 // aber auch "SSL- ist doof, TLS nicht" durch "SSL- und TLS nicht"
  "Cookies" => "Kekse",                          // Deutsche Übersetzung
];

Zusätzliche Kapitel einfügen

Bei Bedarf ist es möglich, den Text mit ganz eigenen Kapiteln anzureichern. Hierzu wird der Kapitelname konfiguriert, an dessen Ende ein neues Kapitel angehängt werden soll. Neue Kapitel werden im Inhaltsverzeichnis dargestellt.

Beispielsweise kann man mit folgender Konfiguration ein Kapitel "Hinweis zur Verantwortlichen Stelle" unterhalb des Kapitels "Datenschutz" einfügen:

$_DLRG_CONF["datenschutz"]["anreichern"] = [
  "Datenschutz" => [
    "heading" => "Hinweis zur verantwortlichen Stelle",
    "text"  => "<p>Die verantwortliche Stelle für die Datenverarbeitung auf dieser Website ist:</p>
                    <p>DLRG Ortsgruppe Pusemuckel e.V.<br />Hinter dem Mond. 5<br/>12345 Pusemuckel</p>
                    vertreten durch:<br/>Vorsitzender Alfred E. Neumann<br />
                    Stellv. Vors. Der Terminator</p>
                    <p>Telefon: 0170 - 1234567<br/>
                    E-Mail: der_vorsitzende@pusemuckel.dlrg.de</p>
                    <p>Verantwortliche Stelle ist die natürliche oder juristische Person, die allein oder gemeinsam mit
                    anderen über die Zwecke und Mittel der Verarbeitung von personenbezogenen Daten (z.B. Namen, E-Mail-Adressen o. Ä.)
                    entscheidet.</p>"
  ]
];

Die Textersetzung erfolgt nach der Anreicherung.

Filtergenerierung

Mit dem Parameter

$_DLRG_CONF["datenschutz"]["config_modus"][ "nur_neue_Filterwerte"] = false;

wird festgelegt, ob alle existierenden Kapitelüberschriften aufgelistet werden sollen. Kapitel, die mit dem Zusatz // neu versehen sind, sind in der aktuellen Filterkonfiguration noch nicht berücksichtigt.

Diese Einstellung wird voraussichtlich nur bei anfänglichem Einbinden des Datenschutzmodule verwendet.

Damit man den Wald vor lauter Bäumen nicht mehr sieht, kann man mit true nur die Kapitel generieren lassen, die noch nicht konfiguriert sind. Allerdings geht hierbei die hierarchische Darstellung teilweise verloren. Diese Einstellung ist für die regelmäßige Wartung des Filters interessant, da man hiermit z.B. sehr schnell sehen kann, ob und welche Seiten neu (also noch nicht konfiguriert) sind.

Beispielkonfiguration des PHP-Moduls

Eine Webseite mit einem Inhaltsverzeichnis bis Ebene 2, des darauf folgenden Datenschutzerklärungstextes mit einem zusätzlichen eigenen Kapitel kann wie folgt erstellt werden:

$filter = [
"Datenschutz auf einen Blick" => true,
  "Datenerfassung auf unserer Website" => true,
  "Analyse-Tools und Tools von Drittanbietern" => true,
 "Allgemeine Hinweise und Pflichtinformationen" => true,
  "Datenschutz" => true,
  "Widerruf Ihrer Einwilligung zur Datenverarbeitung" => true,
  "Beschwerderecht bei der zuständigen Aufsichtsbehörde" => true,
  "Recht auf Datenübertragbarkeit" => true,
  "SSL- bzw. TLS-Verschlüsselung" => true,
  "Verschlüsselter Zahlungsverkehr auf dieser Website" => true,
  "Auskunft, Sperrung, Löschung" => true,
  "Widerspruch gegen Werbe-Mails" => true,
"Datenerfassung auf unserer Website" => true,
  "Registrierung auf dieser Website" => false,
  "Registrierung mit Facebook Connect" => false,
  "Datenübermittlung bei Vertragsschluss für Online-Shops, Händler und Warenversand" => false,
  "Datenübermittlung bei Vertragsschluss für Dienstleistungen und digitale Inhalte" => false,
"Soziale Medien" => false,
"Analyse Tools und Werbung" => false,
"Newsletter" => false,
"Plugins und Tools" => true,
  "YouTube" => false,
  "Vimeo" => false,
  "Google Web Fonts" => false,
  "Google Maps" => true,
  "SoundCloud" => false,
  "Spotify" => false,
"Online Marketing und Partnerprogramme" => false,
"Zahlungsanbieter" => false
];

$enrich = [
  "Datenschutz" => [
    "heading" => "Hinweis zur verantwortlichen Stelle",
    "text"  => "<p>Die verantwortliche Stelle für die Datenverarbeitung auf dieser Website ist:</p>
                    <p>DLRG Ortsgruppe Pusemuckel e.V.<br />Hinter dem Mond. 5<br/>12345 Pusemuckel</p>
                    vertreten durch:<br/>Vorsitzender Alfred E. Neumann<br />
                    Stellv. Vors. Der Terminator</p>
                    <p>Telefon: 0170 - 1234567<br/>
                    E-Mail: der_vorsitzende@pusemuckel.dlrg.de</p>
                    <p>Verantwortliche Stelle ist die natürliche oder juristische Person, die allein oder gemeinsam mit
                    anderen über die Zwecke und Mittel der Verarbeitung von personenbezogenen Daten (z.B. Namen, E-Mail-Adressen o. Ä.)
                    entscheidet.</p>"
  ]
];

$_DLRG_CONF = [
  "datenschutz" => [
    "toc_level" => 2,
    "filter" => $filter,
    "text_mapping" => [
      "DSGVO" => "Datenschutzgrundverordnung",
      "Cookies" => "Kekse"   
      "<p><em><strong>.*?href=\"https:\/\/matomo.org\/docs\/privacy\/.*?\[Hier Matomo iframe-Code einfügen\].*?<\/strong><\/em><\/p>" => ""],
    "anreichern" => $enrich,
    "config_modus" => [ "nur_neue_Filterwerte" => true ]
  ]
];

$_DLRG_CONF["datenschutz"]['anzeige_modus'] = "toc"; // Inhaltsverzeichnis an den Anfang der Seite

dlrgModul("datenschutz");

$_DLRG_CONF["datenschutz"]['anzeige_modus'] = "text"; // danach der Text
dlrgModul("datenschutz");