Rechtskonforme Cookie-Banner zu implementieren ist nicht einfach. Denn nach Ansicht des LfDI-BW benötigen Cookies, die ein Nutzertracking über Seiten- und Gerätegrenzen hinweg ermöglichen die:
- aktive,
- ausdrückliche,
- informierte,
- freiwillige
- und vorherige Einwilligung … des Nutzers.
Eine Lösung, die das Banner-Problem evtl. lösen kann ist das Projekt „oil.js“ (Opt-in and Transparency Layer): https://www.oiljs.org/ . Der Source-Code wird auf Github gehostet: https://github.com/as-ideas/oil
Allerdings dürfen die o.g. Cookies erst nach der Einwilligung durch das Cookie-Banner gesetzt werden! Bei Cookies, die funktional notwendig sind und kein Tracking erlauben, ist die Einwilligung jedoch nicht unbedingt notwendig.
Siehe hierzu auch die FAQ des LfDI-BW zum Thema: https://www.baden-wuerttemberg.datenschutz.de/faq-zu-cookies-und-tracking-2/
Da die Dokumentation leider nicht klar genug formuliert ist, versuche ich hier die Installation zu beschreiben:
1. Verzeichnis auf Webspace anlegen. Hier: Apache auf Debian, Web-Root direkt unter <font inherit/Courier New,Courier,monospace;;inherit;;inherit>/var/www/html</font>:
<font inherit/Courier New,Courier,monospace;;inherit;;inherit>mkdir /var/www/html/oil</font>
2. Dateien herunterladen, oder mit git clonen:
git clone https://github.com/as-ideas/oil.git
3. Anlegen einer deutschen Sprachdatei im JSON-Format für den Cookie-Bannner:
<font inherit/Courier New,Courier,monospace;;inherit;;inherit>vim /var/www/html/oil/deDE_01.json</font>
{ "localeId": "deDE_01", "texts": { "label_intro_heading": "Wir verwenden Cookies und andere Technologien", "label_intro": "Diese Website verwendet Cookies, Web Beacons, JavaScript und ähnliche Technologien. Detaillierte Informationen, auch zum Widerrufsrecht, finden Sie in der Datenschutzerklärung der Website.", "label_button_yes": "OK", "label_button_back": "Zurück", "label_button_advanced_settings": "Erweiterte Einstellungen", "label_cpc_heading": "Bite wählen Sie ihre Privatsphären-Einstellung aus:", "label_cpc_text": "Cookie-Preference-Cener intro", "label_cpc_activate_all": "Alles aktivieren", "label_cpc_deactivate_all": "Alles deaktivieren", "label_cpc_purpose_desc": "Zweck für Cookies: Funktion der Webseite", "label_cpc_purpose_optout_confirm_heading": "Sind Sie sich wirklich sicher?", "label_cpc_purpose_optout_confirm_text": "Diese Einstellung wirkt sich erheblich negativ auf Ihre Erfahrung auf unserer Website aus.", "label_cpc_purpose_optout_confirm_proceed": "Wirklich sicher?", "label_cpc_purpose_optout_confirm_cancel": "Abbrechen", "label_poi_group_list_heading": "", "label_poi_group_list_text": "", "label_third_party": "Third Parties", "label_nocookie_head": "Um unsere Dienstleistungen bestmöglich erbringen zu können, müssen in Ihrem Browser Cookies aktiviert sein.", "label_nocookie_text": "Bitte aktivieren Sie Cookies in den Eigenschaften Ihres Browsers. So können Sie es in <a href=\\\"https://support.google.com/chrome/answer/95647?co=GENIE.Platform%3DDesktop&hl=en-GB\\\" class=\\\"as-oil__intro-txt--link\\\\ " target=\\\"_blank\\\">Google Chrome tun </a> oder in <a href=\\\"https://support.mozilla.org/en-US/kb/cookies-information-websites-store-on-your-computer\\\" class=\\\"as-oil__intro-txt--link\\\" target=\\\"_blank\\\">Firefox</a>." }, "version": 1 }
… oder mit mehr Variablen <font inherit/Courier New,Courier,monospace;;inherit;;inherit>/var/www/html/oil/deDe_02.json:</font>
{
"localeId": "deDE_02",
"texts": {
"label_button_advanced_settings": "Mehr Informationen",
"label_button_back": "Zur\u00fcck",
"label_button_yes": "OK",
"label_cpc_activate_all": "Alle aktivieren",
"label_cpc_deactivate_all": "Alle deaktivieren",
"label_cpc_heading": "Ihre Einstellungen f\u00fcr die Verwendung von Cookies und anderen Technologien:",
"label_cpc_purpose_01_desc": "Speichern von und Zugriff auf Informationen eines Endnutzerger\u00e4ts.",
"label_cpc_purpose_01_text": "Ger\u00e4tezugriff",
"label_cpc_purpose_02_desc": "Verarbeitung von Nutzerdaten f\u00fcr personalisierte Werbung erlauben (einschlie\u00dflich \u00dcbertragung, Tracking und Sammlung von Daten), basierend auf den Einstellungen des Nutzers und seinen bekannten oder aus den \u00fcber verschiedene Seiten, Apps und Ger\u00e4te gesammelten Daten abgeleiteten Interessen; desweiteren zu diesem Zweck Zugriff auf und Speicherung von Informationen auf Ger\u00e4ten erlauben.",
"label_cpc_purpose_02_text": "Personalisierte Werbung",
"label_cpc_purpose_03_desc": "Verarbeitung von Nutzerdaten zur Auslieferung von Inhalten oder Werbung, Messung dieser Auslieferung sowie Analyse der Daten und Erstellung von Reports f\u00fcr das Verst\u00e4ndnis der Nutzung unserer Dienste erlauben; desweiteren zu diesem Zweck Zugriff auf und Speicherung von Informationen auf Ger\u00e4ten erlauben.",
"label_cpc_purpose_03_text": "Analyse",
"label_cpc_purpose_04_desc": "Verarbeitung von Nutzerdaten zur Auslieferung personalisierter Inhalte erlauben (einschlie\u00dflich \u00dcbertragung, Tracking und Sammlung von Daten), basierend auf den Einstellungen des Nutzers und seinen bekannten oder aus den \u00fcber verschiedene Seiten, Apps und Ger\u00e4te abgeleiteten Interessen; desweiteren zu diesem Zweck Zugriff auf und Speicherung von Informationen auf Ger\u00e4ten erlauben.",
"label_cpc_purpose_04_text": "Personalisierte Inhalte",
"label_cpc_purpose_05_desc": "Abgleich von Daten aus Offline-Quellen, die urspr\u00fcnglich in anderen Kontexten gesammelt wurden, erlauben.",
"label_cpc_purpose_05_text": "Datenabgleich mit Offline-Quellen",
"label_cpc_purpose_06_desc": "Verarbeitung von Nutzerdaten erlauben, um den Nutzer \u00fcber mehrere Ger\u00e4te zu erkennen.",
"label_cpc_purpose_06_text": "Ger\u00e4te verbinden",
"label_cpc_purpose_07_desc": "Verarbeitung von pr\u00e4zisen Standortdaten des Nutzers erlauben, um Funktionen zu erm\u00f6glichen, f\u00fcr die die jeweiligen Third-Party-Dienste die Zustimmung erhalten haben.",
"label_cpc_purpose_07_text": "Pr\u00e4zise Standortdaten",
"label_cpc_text": "Bitte w\u00e4hlen Sie, welche Verwendungszweck und Funktionen f\u00fcr Sie aktiviert sind",
"label_intro": "Die Website verwendet Cookies, Web Beacons, JavaScript und \u00e4hnliche Technologien. Ich willige ein, dass <a href=\"javascript:void(0)\" class=\"as-oil__intro-txt--link as-js-companyList\">Unternehmen der Axel Springer SE sowie deren Partner</a> f\u00fcr die bedarfsgerechte Gestaltung, Werbung oder f\u00fcr Marktforschung Nutzungsprofile bei Verwendung von Pseudonymen erstellen und diese an <a href=\"javascript:void(0)\" class=\"as-oil__intro-txt--link as-js-thirdPartyList\">Dritte</a> weitergeben d\u00fcrfen. Diese Nutzungsprofile d\u00fcrfen nicht mit Daten \u00fcber den Tr\u00e4ger des Pseudonyms zusammengef\u00fchrt werden. Detaillierte Informationen und Hinweise zu Ihrem Widerspruchsrecht finden Sie in der Datenschutzerkl\u00e4rung.",
"label_intro_heading": "Nutzung von Cookies und anderen Technologien",
"label_nocookie_head": "Um unsere Services bestm\u00f6glich erbringen zu k\u00f6nnen, m\u00fcssen in deinem Browser Cookies aktiviert sein.",
"label_nocookie_text": "Bitte aktiviere Cookies in den Einstellungen deines Browsers. So kannst du in <a href=\"https://support.google.com/chrome/answer/95647?co=GENIE.Platform%3DDesktop&hl=en-GB\" class=\"as-oil__intro-txt--link\" target=\"_blank\">Google Chrome</a> oder <a href=\"https://support.mozilla.org/en-US/kb/cookies-information-websites-store-on-your-computer\" class=\"as-oil__intro-txt--link\" target=\"_blank\">Firefox</a> Cookies aktivieren.",
"label_poi_group_list_heading": "Ihre Einwilligung f\u00fcr Konzerngesellschaften",
"label_poi_group_list_text": "Hier ist eine Liste von Konzerngesellschaften:",
"label_thirdparty_list_heading": "Ihre Einwilligung f\u00fcr die Software von Dritten",
"label_thirdparty_list_text": ""
},
"version": 1
}
4. Anpassen des HTML-heads in der Datei <font inherit/Courier New,Courier,monospace;;inherit;;inherit>index.html</font>:
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<!-- oil.js Cookie Consent -->
<script id="oil-configuration" type="application/configuration">
{
"config_version": 1,
"publicPath": "oil/",
"locale_url": "oil/deDE_01.json",
"advanced_settings": false,
"timeout": -1,
"theme": "dark",
"gdpr_applies_globally": true,
"default_to_optin": true
}
</script>
<!-- 2. CMP-STUB You need to add the CMP stub (a small script which stores all requests until the full script is loaded) and the script itself. -->
<script>
/*! 1.3.5-RELEASE */!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:o})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="https://unpkg.com/@ideasio/oil.js@1.3.5/release/current/",n(n.s=117)}({117:function(e,t,n){"use strict";!function(e,t){e.__cmp||(e.__cmp=function(){function n(e){if(e){var n=!0,r=t.querySelector('script[type="application/configuration"]#oil-configuration');if(null!==r&&r.text)try{var a=JSON.parse(r.text);a&&a.hasOwnProperty("gdpr_applies_globally")&&(n=a.gdpr_applies_globally)}catch(e){}e({gdprAppliesGlobally:n,cmpLoaded:o()},!0)}}function o(){return!(!e.AS_OIL||!e.AS_OIL.commandCollectionExecutor)}!function e(){if(!(t.getElementsByName("__cmpLocator").length>0))if(t.body){var n=t.createElement("iframe");n.style.display="none",n.name="__cmpLocator",t.body.appendChild(n)}else setTimeout(e,5)}();var r=[],a=function(t,a,c){if("ping"===t)n(c);else{var i={command:t,parameter:a,callback:c};r.push(i),o()&&e.AS_OIL.commandCollectionExecutor(i)}};return a.commandCollection=r,a.receiveMessage=function(t){var a=t&&t.data,c="string"==typeof a;if(a=c&&-1!==a.indexOf("__cmpCall")?JSON.parse(a).__cmpCall:a.__cmpCall)if("ping"===a.command)n(function(e,n){var o={__cmpReturn:{returnValue:e,success:n,callId:a.callId}};t.source.postMessage(c?JSON.stringify(o):o,t.origin)});else{var i={callId:a.callId,command:a.command,parameter:a.parameter,event:t};r.push(i),o()&&e.AS_OIL.commandCollectionExecutor(i)}},function(t){var n=e.addEventListener||e.attachEvent;n("attachEvent"===n?"onmessage":"message",function(e){t.receiveMessage(e)},!1)}(a),a}())}(window,document)}});
</script>
<!-- 3. Link to the OIL-Script itself -->
<script src="oil/oil.1.3.5-RELEASE.min.js" type="text/javascript"></script>
<!-- END of oil.js -->
</head>
5. Eine eigene Config-Sektion kan auch in der Sandbox von https://sandbox.oiljs.org/ erzeugt werden.
6. In der Datenschutzerklärung sollten alle Cookies erklärt werden. Z.B. so:
# DokuWiki
Art: Standard PHP session identifier.
Funktion: Für temporäre Daten und zur Vermeidung von CSRF (Cross-Site-Request-Forgery) Angriffen.
Bedeutung: zur Funktion der Webseite notwendig
Typischer Inhalt: Zufalls-ID
Ablauf / Ungültigkeit / Löschung: am Ende der Browser-Sitzung.