hmm: Cookie Zustimmung abfragen richtig einbauen...

Hi Leute,

ich möchte erst dann Besucherdaten per Analytics tracken, wenn mir diese Besucher eine Zustimmung dazu gegeben haben.

Ich habe dazu folgende Sachen eingebaut:

<script type="text/javascript">
	  window.CookieHinweis_options = {
	  message: 'Online-Skillmatrix nutzt Cookies, um bestmögliche Funktionalität bieten zu können.',
	  agree: 'Ok, verstanden',
	  learnMore: 'Mehr Infos',
	  link: '/datenschutz',
	  theme: 'dunkel-oben'
	 };
	</script>
	<script type="text/javascript" src="https://s3.eu-central-1.amazonaws.com/website-tutor/cookiehinweis/script.js"></script>

Das Ding wird solange eingeblendet, bis der Webseiten Besucher auf "Ok, verstanden" klickt.

Mein Google Tracking Zeug mache ich wie folgt:

	    var gaProperty = 'UA-xxx-1'; 
	    var disableStr = 'ga-disable-' + gaProperty; 
	    if (document.cookie.indexOf(disableStr + '=true') > -1) { 
	        window[disableStr] = true;
	    } 
	    function gaOptout() { 
	        document.cookie = disableStr + '=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/'; 
	        window[disableStr] = true; 
	        alert('Das Tracking ist jetzt deaktiviert'); 
	    } 
	    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
	            (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
	        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
	    })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 
	
	    ga('create', 'UA-xxx-1', 'auto'); 
	    ga('set', 'anonymizeIp', true); 
	    ga('send', 'pageview'); 

Derzeit wird leider auch getrackt, wenn Besucher dem Cookie Hinweis nicht zugestimmt haben. Habt ihr eine Idee, wie ich das Tracking Script so in mein Cookie Formular integrieren kann, dass erst nach Zustimmung getrackt wird?

Ich habe den geänderten Tracking Code von der Anleitung hier:

https://www.datenschutzbeauftragter-info.de/fachbeitraege/google-analytics-datenschutzkonform-einsetzen/

Leider ist mir nicht ganz klar, wie ich diesen Code richtig einbaue bzw. benutze... :/

  1. Aloha ;)

    ich möchte erst dann Besucherdaten per Analytics tracken, wenn mir diese Besucher eine Zustimmung dazu gegeben haben.

    So weit, so löblich.

    Ich habe dazu folgende Sachen eingebaut:

    <script type="text/javascript">
    	  window.CookieHinweis_options = {
    	  message: 'Online-Skillmatrix nutzt Cookies, um bestmögliche Funktionalität bieten zu können.',
    	  agree: 'Ok, verstanden',
    	  learnMore: 'Mehr Infos',
    	  link: '/datenschutz',
    	  theme: 'dunkel-oben'
    	 };
    	</script>
    	<script type="text/javascript" src="https://s3.eu-central-1.amazonaws.com/website-tutor/cookiehinweis/script.js"></script>
    

    Du möchtest also das Tracking durch Google Analytics bis zum OptIn verhindern und bindest dafür ein Script ein, das von einem Amazon-Web-Services-Server geladen wird? 😂

    Vielleicht solltest du an der Stelle auf die Einbindung jeglicher Fremdquellen verzichten bis du ein entsprechendes OptIn-Cookie gesetzt hast.

    Dazu kommt, dass ich dir zur Funktionalität dieses Scripts nichts sagen kann; das verlinkte Script ist nicht wirklich menschenlesbar.

    Aber das scheint ja bei dir zu funktionieren (auch wenn ich dir WIRKLICH nahelege, das Skript wenigstens auf deine eigene Domain zu kopieren), denn du schreibst ja:

    Das Ding wird solange eingeblendet, bis der Webseiten Besucher auf "Ok, verstanden" klickt.

    Soweit so gut also. Fast. Denn das ominöse von dir eingebundene Skript, dessen Funktionalität nicht einfach nachzuvollziehen ist, hat dann zwar was getan, aber du weißt nicht was.

    Vermutlich hat es selbst ein Cookie gesetzt. Oder irgendwo im localStorage was abgelegt. Oder es hat eine weitere Option für einen Callback. Oder so. Kann ich dir nicht sagen - denn wie gesagt ist für mich nicht nachvollziehbar, was das Skript tut.

    Das wäre dann von dir noch herauszufinden, damit du weiterkommst.

    Mein Google Tracking Zeug mache ich wie folgt:

    	    var gaProperty = 'UA-xxx-1'; 
    	    var disableStr = 'ga-disable-' + gaProperty; 
    	    if (document.cookie.indexOf(disableStr + '=true') > -1) { 
    	        window[disableStr] = true;
    	    } 
    	    function gaOptout() { 
    	        document.cookie = disableStr + '=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/'; 
    	        window[disableStr] = true; 
    	        alert('Das Tracking ist jetzt deaktiviert'); 
    	    } 
    	    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
    	            (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
    	        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
    	    })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 
    	
    	    ga('create', 'UA-xxx-1', 'auto'); 
    	    ga('set', 'anonymizeIp', true); 
    	    ga('send', 'pageview'); 
    

    Derzeit wird leider auch getrackt, wenn Besucher dem Cookie Hinweis nicht zugestimmt haben.

    Richtig, denn die von dir hier gewählte Lösung ist ein OptOut, kein OptIn.

    Habt ihr eine Idee, wie ich das Tracking Script so in mein Cookie Formular integrieren kann, dass erst nach Zustimmung getrackt wird?

    So schnell mal "quick and dirty" hätte ich eine Idee, die nicht viel "Umschreiben" braucht. Dabei rufst du direkt nach der Definition von gaOptout (und damit noch vor dem Einbinden von GA selbst) die Funktion gaOptout auf. Also so:

    
    function gaOptout() { 
      /*Funktionsdefinition*/
    } 
    gaOptout();
    (function(i,s,o,g,r,a,m){/*irgendwas*/})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
    
    

    Damit ist schonmal jeder User standardmäßig vom Tracking ausgenommen. (Natürlich könntest du die Funktion auch entfernen und einfach das was innerhalb der Funktion steht direkt ausführen, aber so kannst du die Funktion vielleicht benutzen falls du sie je nochmal brauchst.)

    Dann musst du dich darüber informieren, was dein Drittanbieter-Skript von oben tut bzw. wo du dem noch was auftragen kannst, was es tun soll, sobald der Benutzer auf "Ok, verstanden" drückt (Ok, einverstanden ist übrigens sicher eine sinnvollere Beschriftung!).

    Wenn du das herausgefunden hast, sorgst du dafür, dass dort eine Optin-Funktion aufgerufen wird, die in etwa so aussieht:

    function gaOptin() {
      if (window[disableStr]) {
        let oldCookie = document.cookie;
        let needle = disableStr + '=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/'; 
        document.cookie = oldCookie.substring(0,oldCookie.indexOf(needle)) + oldCookie.substring(oldCookie.indexOf(needle)+needle.length); 
        window[disableStr] = false; 
      }
      alert('Das Tracking ist jetzt aktiviert'); 
    } 
    

    Kurze Erklärung zum Code: Falls das disable-Cookie gesetzt ist ersetze das Cookie durch alle Teile vor und nach dem disable-Cookie.

    Leider ist mir nicht ganz klar, wie ich diesen Code richtig einbaue bzw. benutze... :/

    Ich hoffe das was ich schrieb hilft dir weiter.

    Grüße,

    RIDER

    Disclaimer: Den Code habe ich nach bestem Wissen und Gewissen zusammengeschrieben, aber nicht getestet.

    --
    Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
    # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
    1. Hallo,

      … Denn das ominöse von dir eingebundene Skript, dessen Funktionalität nicht einfach nachzuvollziehen ist, hat dann zwar was getan, aber du weißt nicht was.

      es hat auf jeden Fall, wie alle von externen Anbietern eingebundene Ressourcen, dem Fremdanbieter mitgeteilt, welche Seite mit der IP-Adresse deines Besuchers angesurft wurde, also noch ein Tracking.

      Gruß
      Jürgen

      1. Aloha ;)

        … Denn das ominöse von dir eingebundene Skript, dessen Funktionalität nicht einfach nachzuvollziehen ist, hat dann zwar was getan, aber du weißt nicht was.

        es hat auf jeden Fall, wie alle von externen Anbietern eingebundene Ressourcen, dem Fremdanbieter mitgeteilt, welche Seite mit der IP-Adresse deines Besuchers angesurft wurde, also noch ein Tracking.

        Eben. Deshalb ja meine Empfehlung, erstmal auf jegliche Drittanbieter-Einbindung zu verzichten.

        Grüße,

        RIDER

        --
        Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
        # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
  2. Hi,

    ich möchte erst dann Besucherdaten per Analytics tracken, wenn mir diese Besucher eine Zustimmung dazu gegeben haben.

    <script type="text/javascript">
    	  window.CookieHinweis_options = {
    	  message: 'Online-Skillmatrix nutzt Cookies, um bestmögliche Funktionalität bieten zu können.',
    [...]
    	<script type="text/javascript" src="https://s3.eu-central-1.amazonaws.com/website-tutor/cookiehinweis/script.js"></script>
    

    Es wird also, wie schon erwähnt, erstmal ohne User-Zustimmung schon mal amazon das Tracking ermöglicht.

    Und wenn der User der Verwendung von Cookies zustimmt, machst Du Google-Tracking.

    Du: "Darf ich Dir einen Keks geben?" User: "Ja"

    soweit ok.

    Statt daß jetzt aber kommt:

    Du: "Hier hast Du einen Keks, zeig ihn mir bitte immer vor, wenn Du wieder zu mir kommst"

    kommt bei Dir:

    Du (nur zu Dir, nicht zum User): "Ich schreib jetzt alles, was ich über Dich weiß, an die große Datenkrake"

    Welchen Zusammenhang siehst Du zwischen der Zustimmung zu Deinem Cookie und der Datenweiterleitung an die Datenkrake?

    Ich seh da keinen ...

    cu,
    Andreas a/k/a MudGuard

  3. Danke!

    Okay, das Drittanbieterscript nehme ich raus und schreibe ein eigenes. Ich poste den Code morgen hier, werden wohl fehler drin sein ^^

    Fragen am rand: ich nutze ajax und lade das im header ohne es auf dem server zu haben. Ist das datenschutztechnisch ein problem? Meine spring application schreibt wohl einen jsp cookie den ich nicht nutze und der nach null bzw einem statischem wert aussieht, ist das datenschutztechnisch relevant?

    Zum thema google analytic: Ich möchte nur messen wie gut meine seite besucht und genutzt wird. Inzwischen würde ich gerne testen, ob ich das auch selber per script gebacken kriege.

    Ich denke mir dss gerade so: Mein script guckt ob cookie 'zauberhut' gesetzt ist, falls nicht belendet es die frage ein ob es das setzen darf. Wenn das cookie gesetzt worden ist, speichert das script die uhrzeit und die seite die der besucher besucht hat in einer tabelle. Dafür muss das script diese daten an meine rest schnittstelle per http request schicken. Frage: wie identifiziere ich den besucher? Wie stelle ich sicher das die gespeicherten daten regelmässig gelöscht werden?

    1. @@hmm

      Zum thema google analytic: Ich möchte nur messen wie gut meine seite besucht und genutzt wird.

      Das Thema hatten wir doch schon.

      LLAP 🖖

      --
      „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
      1. Mein problem ist nur, dass ich nicht weis worauf ich cliendseitig achten muss.

        Wenn ich die user id irgendwie ermittle, wie anonymisiere ich sie so das ich wwiterhin eine eindeutige id habe und darf ich eine anonymisierte id an meine rest api schicken? Nach zustimmung würde ich dann cliendseitig 1 mal pro minute id, date und url an meine api schicken.

        1. Hello,

          ganz ohne Cookies kein Zugang zum internen Bereich.

          Unterscheide zwischen den "internen Cookies", die für den direkten technischen Betrieb inclusive benutzerbezogener Funktionen (Anmeldung) notwendig sind und solchen, die tatsächlich für das Tracking benutzt, oder sogar an Dritte weitergegeben werden.

          • An oberster Stelle sollte immer das DNT-Flag ($_SERVER['HTTP_DNT']) abgefragt werden.
          • Dann kommt die Einwilligung zu "internen Cookies" (Token für Login, ...)
          • Dann kommt, wenn das DNT-Flag nicht gesetzt ist, die Information zur Verwendung von Requestdaten auch für das Tracking.

          Und mMn muss der ganze logische Apparat auch ohne JavaScript o. ä. funktionieren.

          |[edit: TS 2018-09-15 0920]
          Siehe hierzu auch mein anderes Posting|

          Liebe Grüße
          Tom S.

          --
          Es gibt nichts Gutes, außer man tut es!
          Das Leben selbst ist der Sinn.
        2. Aloha ;)

          Wenn ich die user id irgendwie ermittle, wie anonymisiere ich sie so das ich wwiterhin eine eindeutige id habe und darf ich eine anonymisierte id an meine rest api schicken? Nach zustimmung würde ich dann cliendseitig 1 mal pro minute id, date und url an meine api schicken.

          „Nach Zustimmung“ darfst du quasi alles. Auch IP-Adressen speichern. Aber eben nur, wenn in die Speicherung von IP-Adressen eingewilligt wurde - zum Bleistift.

          Grüße,

          RIDER

          --
          Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
          # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
      2. Was die anderen anbieter vom tracking angeht:

        Woher weis ich das die weniger krakenhaft sind als google? Find ich da irgendwo eine anleitung die mir zeigt wie ich das so einbaue das die daten passend gelöscht werden nur erst nach zustimmung getrackt wird?

        Ist es schwer das cliendseitig selber zu erheben? Ich versuch gerade abzuschätzen ob es sinn macht das selber zu bauen.

        1. @@hmm

          Was die anderen anbieter vom tracking angeht:

          Woher weis ich das die weniger krakenhaft sind als google?

          Zu Gaug.es sagt Jen Simmons: „Man bezahlt dafür. Ich hoffe, dass die Daten nicht gesammelt und weiterverkauft werden.“[1] Hoffnung, weil es eben nicht deren Geschäftsmodell ist, Daten zu sammeln und zu verkaufen. Genau wie bei Apple.

          So wie ich das verstehe, läuft bei Matomo alles auf dem eigenen Server (bzw. dem eigenen Bereich in der Cloud), d.h. die Daten gehen gar nicht an irgendwen anderen raus.

          LLAP 🖖

          --
          „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann

          1. Nachdenkliches zum Wochenende: Alternativen zu Googles Überwachungskapitalismus ↩︎

  4. Hello,

    Ausgangssituation:

    #auf dem Client:
    Der Client hat keinen Cookie für die betroffene Domain oder Unterseite der Domain.

    Jede Seite müsste im Prinzip nun (mindestens) einen Link mit URL-Parameter enthalten

    <a href = "?allowcookies=201809140827">Cookies erlauben</a>  
    

    #Auf dem Server:
    Solange kein Cookie vom Client kam, prüft der Server, ob der URL-Parameter vorhanden ist und ob er in ein zulässiges Zeitfenster passt.

    Wenn ja, wird ein Cookie gesetzt und die Seite neu aufgerufen (Umleitung) ohne den Link.

    #DNT-Flag:
    Außerdem sollte das DNT-Flag ($_SERVER['HTTP_DNT']) abgefragt werden.

    Wenn dieses gesetzt ist, sollte sich das Cookie-Setzen und das Nachfragen nach einer Erlaubnis noch anders gestalten. Der Link würde sich dann nur auf "interne Cookies", die zum direkten technischen Betrieb der Seite notwendig sind, beziehen.

    So sollte es auch ohne JavaScript bereits funktionieren.

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
  5. Hello,

    deinen Analytics-Kram sollte dein Server erst ausliefern, wenn das Cookie gesetzt war. Das Cookie darfst Du erst nach Zustimmung setzen.

    Den Analytics-Kram schon prophylaktisch "disabled" auszuliefern, wäre Traffic-Verschwendung und mir außerdem zu heiß. Was nicht drin ist in der Seite kann auch nicht missbraucht werden.

    Siehe hierzu auch meine anderen Postings

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. Danke, ich hab das jetzt so eingebaut.

      Frage: Meine spring app setzt automatisch einen cookie jsessionid auch ohne das der nutzer meinen datenschutzdings zugestimmt hat. Die krieg ich leider nicht weg. Eventuell fliegt diese id auch in mein programm zurück und damit in meine vm die bei meinem hoster läuft.

      Ist das ok?

      1. Hello,

        Meine spring app setzt automatisch einen cookie jsessionid auch ohne das der nutzer meinen datenschutzdings zugestimmt hat. Die krieg ich leider nicht weg. Eventuell fliegt diese id auch in mein programm zurück und damit in meine vm die bei meinem hoster läuft.

        Das ist nach dem beschriebenen Algorithmus nicht ok.

        Ob die DSGVO einen prophylakischen Cookie zulässt, weiß ich nicht. Da würde ich mal @Matthias Scharwies, @Gunnar Bittersmann, @Camping_RIDER, usw. um Rat fragen.

        Wie Du diese Schmuddeleien von eingebundenen Modulen ins PHP ggf. aber "großtechnisch" weg bekommen kannst, dazu hätte ich schon eine Idee. Das erfordert aber Zugriff auf den Hosting-Server bezüglich der PHP-Einrichtung.

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
      2. Hallo,

        ich denke, du benötigst eine Vorschaltseite mit Abfrage. Bei OK gehts zur richtigen Seite, bei Ablehnug gehts hier lang.

        Gruß
        Jürgen

        1. Hello Jürgen,

          ich denke, du benötigst eine Vorschaltseite mit Abfrage. Bei OK gehts zur richtigen Seite, bei Ablehnug gehts hier lang.

          Gute Idee!

          Das könnte man noch weiter ausbauen.
          Besonders gefällt mir das "best viewed", also vergleichbar mit "optimiert für" ;-P

          Liebe Grüße
          Tom S.

          --
          Es gibt nichts Gutes, außer man tut es!
          Das Leben selbst ist der Sinn.