IPs anonymisieren in der Praxis
23.05.2008
Zunehmend setzt sich die Ansicht durch, dass IPs als personenbezogenes Datum zu sehen sind – dazu früher hier. Die ältere Ansicht, eine IP sei ein “relativ personenbezogenes Datum” ist schon lange nicht mehr h.M., absehbar, dass in naher Zukunft die ohnehin schon überwiegend vertretene Meinung der anderen Seite bald beherrschend ist.
Damit ergeben sich für Webmaster ganz praktische Probleme: Wie speichert man denn keine IPs bzw. wie anonymisiert man diese?
Update: Aus aktuellem Anlaß habe ich den Artikel nochmals “nach oben” geholt.
Als “gemeiner Webmaster” gibt es vor allem zwei Ebenen die man bedenken muss: Den Server mit seinen Logfiles einerseits, eventuell eingesetzte Skripte andererseits. Ich bespreche kurz beides.
Der Server
Jedenfalls beim verbreiteten Apache-Server gibt es mehrere Möglichkeiten. Am einfachsten wird es sein, das Apache-Modul “mod_removeip” einzusetzen, dass in jeder gängigen Linux-Distribution bereits verfügbar ist. Damit werden global, vhost-Abhängig geht es nicht, keine IPs erfasst.
Wer diese Möglichkeit nicht hat, kann das Logfileformat im der httpd.conf direkt verändern. Am besten man legt ein eigenes Logfile-Format an, z.B.
LogFormat "127.0.0.1 - - %t \"%r\" %>s %b" anonym
Und stellt dann die Zeile mit den Logfiles von “combined” auf “anonym” um:
CustomLog /var/log/apache2/access.log anonym
Wer “richtig” anonymisieren will, das heisst zwar IPs erfassen, diese aber in den letzten 3 Stellen anonymiseren, kann ein Perl-Skript nutzen.
Ich weise nochmals darauf hin, dass ein Betreiben eines eigenen Servers immer auch die Fähigkeit vorraussetzt, diesen auch zu warten. Vor langer Zeit habe ich einmal ein Tutorial begonnen, das Webmastern das erklären sollte. Ich stelle dies hier kostenlos zum Download: Apache – Tutorial.
Beim Anbieter
Zunehmend bieten Web-Anbieter an, dass man Logfiles anonymisert führen kann. Hosteurope etwa, man muss sich nur einloggen und kann unter “Logfiles” die anonyme Logging-Funktion aktivieren. Somit können auch User, die keinen Server sondern nur ein Hosting-Produkt nutzen, anonyme Logfiles führen.
Das PHP-Skript
In PHP-Skripten geht es mit einem zentralen Ansatz: Die globale Variable $_SERVER[‘REMOTE_ADDR’] ist eine Variable wie jede andere auch, das heisst: Man kann sie genausogut auch überschreiben. Man nimmt sich also eine Datei -sofern vorhanden, bei modernen CMS ist dies eigentlich immer der Fall- die als erstes in wirklich jeder Datei geladen wird. In Serendipity ist dies etwa die serendipity_config.inc.php. Hier als erstes in der Datei nun die globale Variable ändern:
$_SERVER[‘REMOTE_ADDR’] = “127.0.0.1”;
Damit dürfte das Thema im gesamten Code durch sein. Ähnliches sollte man bei WordPress und Co. machen können. Um die IP zu anonymiseren kann man auch einfach den letzten IP-Block abspalten:
$ip = $_SERVER[‘REMOTE_ADDR’];
$ip = explode(“.”, $ip);
$_SERVER[‘REMOTE_ADDR’] = “”.$ip[0].”.”.$ip[1].”.”.$ip[2].”XXX”;
Zugegeben, mit einem strlen() und einem substr() ginge das schneller, aber ich denke diesen Codeschnippsel werden mehr Leute auf Anhieb verstehen. Ich selber bevorzuge das Austauschen des letzten Ziffernblocks komplett, da dies für Statistiken vollkommen ausreichend ist und gar keine Rückschlüsse auf den Nutzer zulässt. Ob man nun den ganzen Block nimmt oder nur eine Ziffer ist aber nicht nur Geschmacksfrage. Wer etwa nur die letzte Ziffer austauscht, könnte dennoch Rückschlüsse ermöglichen, etwa bei einer Fahndungsmethode wie der personenbezogenen Datenfahndung, die im Mikado-Verfahren angewendet wurde.