IPs anonymisieren in der Praxis

Icon - Server und IDZunehmend 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, das z.B. hier geboten oder auch hier wird.

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.

 
Beitrag veröffentlicht am 23. Mai 2008.

4 Kommentare

  1. Ist die IP-Adresse personenbezogen? (Update) | Datenschutzbeauftragter Online schrieb:

    [...] Einen Artikel zum Anonymisieen von PHP-Software und Webserver-Logfiles finden Sie hier. Posted in Recht | 8 [...]

  2. Easyfunk [welt-hertha-linke] schrieb:

    Hallo Jens,

    leider ist in der Version 1.3.1 von s9y diese Variable nicht mehr in der serendipity_config.inc.php enthalten. Hättest du eine andere Idee? Vielen Dank!

    Grüße

  3. jens.ferner schrieb:

    Das ist eine globale Variable der Serverumgebung: Nimm die Textzeilen einfach auf und fertig. Damit übeschreibst du die Umgebungsvariable und egal wann s9y darauf zugreift: Es ist anonymisiert.

  4. Easyfunk [welt-hertha-linke] schrieb:

    Super, vielen Dank!

    Ich war unsicher, weil du oben von einer Änderung sprichst. Das impliziert ja schon eine vorhandene Variable. Dann gabe es Probleme beim Copy&Paste, weil die Zeichen nicht stimmten (Anführungs- und Abführungsstriche). So klappt es aber:

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

    Ich bin nicht so routiniert im Code-Bearbeiten und vielleicht geht es anderen ja auch so, die sich nach dieser Anleitung richten. Bei mir klappt es jedenfalls wunderbar. Vielen Dank für die Anleitung und die Hilfe!

    Grüße

Einen Kommentar verfassen

Bitte beachten Sie: Kommentare auf dieser Seite werden moderiert, das heisst immer erst von einem Admin gelesen und dann ggfs. freigeschaltet. Dadurch wird es etwas dauern bis der Kommentar erscheint, beachten Sie bitte auch die Hinweise im Bereich "About".