tas2580
Blog über Webentwicklung

IP Adresse mit PHP anonymisieren

tas2580  

Seit dem Inkrafttreten des Datenschutz Grundverordnung kommt immer wieder die Frage auf wie man IP Adressen anonymisiert da anonymisierte IP Adressen nicht mehr personenbezogen sind und somit auch nicht geschützt werden müssen. Dazu gibt es zwei gängige Methoden die ich hier vorstellen möchte. Zu beiden Methoden gibt es einen PHP Code den man am Anfang seines Scripts einfügen kann um alle IP Adressen im weiteren Verlauf des Scripts zu ändern ohne weitere Änderungen am Script machen zu müssen. Das sollte mit allen CMS ohne Probleme funktionieren.


Komplett anonymisieren

Das einfachste ist natürlich wenn man erst gar keine IP Adressen speichert. Da die meisten CMS aber zu verschiedenen Datensätzen IP Adressen speichern ist es sehr Aufwändig das alles umzustellen und gibt Probleme bei Updates. Man kann aber alle IP Adressen durch 127.0.0.1 (Die IP Adresse von localhost) ersetzen.

$_SERVER['REMOTE_ADDR'] = '127.0.0.1';

Das Problem dabei ist, dass jetzt für das Script alle Besucher die selbe IP Adresse haben was unter Umständen zu Problemen führen kann.

Das letzte Oktett anonymisieren

Eine weit verbreitete Methode ist das anonymisieren des letzten Oktetts der IP Adresse, dabei wird einfach die letzte Ziffer auf eine bestimmte Zahl, meistens Null, geändert. Aus 198.51.100.54 wird also 198.51.100.0. Bei der Methode gibt es allerdings das Problem das es dann nur 254 Möglichkeiten gibt (255 ist der Broadcast und kann nicht als normale IP verwendet werden). Außerdem kommt es so schneller zu Kollisionen da zwei Rechner im selben Netz mit dieser Methode die selbe IP Adresse haben. Der Effekt wird noch verstärkt wenn man nicht nur das letzte Oktett sondern die letzten beiden Oktett auf Null setzt.

$_SERVER['REMOTE_ADDR'] = preg_replace(['/\.\d*$/','/[\da-f]*:[\da-f]*$/'],['.0','0000:0000'], $_SERVER['REMOTE_ADDR']);

Die IP hashen

Man könnte statt der originalen IP Adresse einen Hash der IP Adresse verwenden. Da es aber "nur" ca. 4,3 Milliarden IPv4 Adressen und 340 Sextillionen IPv6 Adressen gibt ist es problemlos möglich einmal zu jeder IP Adresse einen Hash zu erzeugen und in einer Tabelle zu speichern. OK ein bisschen Speicherplatz und Rechenzeit benötigt man dazu schon, aber nicht so viel das man das nicht mit einem überschaubaren Budget bewerkstelligen könnte. In der Tabelle kann man dann einfach nachschauen welche IP zu welchen Hash gehört, damit wäre die IP Adresse dann nicht mehr anonym. Wenn man aber zum hashen nicht nur die IP Adresse sondern noch weitere Daten verwendet wird es beinahe unmöglich eine Tabelle mit allen Möglichkeiten zu erstellen. Man muss nur darauf achten, dass man Werte benutzt die sich nicht ständig ändern da der Besucher sonst bei jedem Seitenaufruf eine andere Adresse hat. Dinge wie Browsersprache und Useragent eignen sich aber sehr gut dafür. Wenn man jetzt eine Tabelle erstellen möchte reicht es nicht mehr einen Eintrag für jede IP Adresse zu erstellen sondern muss für jede IP Adresse jede mögliche Kombination aus Browsersprache und Useragent berücksichtigen. Die Tabelle würde also extrem groß und man bräuchte extrem viel Rechenzeit zum erstellen der Tabelle. Durch die vielen möglichen Kombinationen kann es dann auch zu Kollisionen kommen was das zurückrechnen zur originalen IP praktisch unmöglich macht.

$_SERVER['REMOTE_ADDR'] = implode(':'str_split(md5($_SERVER['HTTP_ACCEPT_LANGUAGE'] . $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']), 4));

Ein Vorteil dieser Methode ist, dass das Ergebnis das selbe Format wie eine IPv6 hat und somit von allen Scripten problemlos akzeptiert wird.


Kommentare


Bitte warten ...

Kommentar schreiben

URLs werden automatisch umgewandelt.
[b]DEIN TEXT[/b] für Fett gedruckt
[quote]DEIN ZITAT[/quote] für Zitate
[code]DEIN CODE[/code] für Code
captcha