IP-Adressen in PHP anonymisieren (und in Gravity Forms anwenden)

IP-Adressen werden spätestens ab dem 25. Mai (DSGVO) endgültig als personenbezogene Daten klassifiziert. Wer mit Modulen zu tun hat, die IP-Adressen speichern, sollte also entweder um die Zustimmung der Speicherung der IP-Adresse bitten oder sie aber – und das ist deutlich einfacher – anonymisieren.

IPs anonymisieren

Google Analytics bietet zum Beispiel den _anonymizeIp-Parameter an, mit dem die letzten Stellen einer IP auf den Wert „0“ gesetzt werden, wodurch die IP-Adresse nicht mehr eindeutig einer Person zugeordnet werden kann. Genau so gehen wir in der unten für PHP geschriebenen Funktion auch vor.

Für IPv4-Adressen sieht das dann so aus:

12.214.31.144
12.214.31.0

Und für IPv6-Adressen so:

80af:19cf:97ef:4797:8367:43b:d58d:5bab
80af:19cf:97ef:4797:8367:43b:0:0

Sind die IP-Adressen einmal anonymisiert, können sie auch ruhig ohne zusätzliche Einwilligung des Users in der Datenbank gespeichert werden.

PHP-Funktion: anonymize_ip

In die Praxis umgelegt, sieht die Anonymisierungsfunktion (angelehnt an Googles Parameter habe ich sie anonymize_ip getauft), so aus. Ein einfaches RegEx filtert die letzten Stellen heraus und ein Replacement mit „0“ oder „0:0“ ersetzt sie. Der Rückgabewert ist die anonymisierte IP-Adresse.

function anonymize_ip( $ip ) {
  $match = array(
    '/[0-9]+\z/',           // IPv4
    '/[\da-f]*:[\da-f]*$/'  // IPv6
  );
  $replace = array(
    '0',                    // IPv4
    '0:0'                   // IPv6
  );
  return preg_replace( $match, $replace, $ip );
}

Wo nun auch immer IP-Adressen zur Speicherung übertragen werden, sollten sie zuerst an die anonymize_ip-Funktion übergeben werden, damit die Speicherung nur anonymisierte Daten enthält.

Lösung für WordPress und Gravity Forms

Ich habe anonymize_ip geschrieben, damit ich nicht von externen Modulen für die Nutzung des WordPress-Formularplugins “Gravity Forms” abhängig bin. Damit die Funktion WordPress (und all seinen Modulen) zur Verfügung steht, muss man sie entweder in der functions.php des aktuellen Themes ablegen oder als Plugin registrieren.

In der Nutzung von Gravity Forms, ist die Anwendung einfach: Indem ich die IP-Adresse eines Users zuerst an anonymize_ip übertrage (und das ist durch einen dementsprechenden Filter in Gravity Forms möglich), speichert das Plugin nur die anonymisierte IP-Adresse ab. Das lässt sich mit einem Einzeiler in der functions.php bewerkstelligen:

add_filter( 'gform_ip_address', 'anonymize_ip' );

Alternativ zur Speicherung einer anonymisierten IP-Adresse ist es mit Gravity Forms auch möglich, die IP-Adresse überhaupt nicht zu speichern. Ich persönlich würde das nicht tun, denn selbst anonymisierte IP-Adressen machen es deutlich einfacher, Spambots und andere Unholde zu erkennen, aber wer den radikalen Weg gehen will, kann sich die obige Funktion und den obigen Filter schenken und stattdessen unter Nutzung von __return_empty_string den Filter

add_filter( 'gform_ip_address', '__return_empty_string' );

in der functions.php anwenden. Damit werden in Gravity Forms nur noch leere Strings als IP-Adressen gespeichert.