Das Putzlowitsch Test- und SEO-Blog

Der Pinterest-Schutz ist schon eingebaut – bei meinen Seiten

Schutzbedürftig

Seit einiger Zeit gibt es für Webseitenbetreiber die Möglichkeit das Pinnen von Bildern bei Pinterest zu „verhindern“. Dazu steht in der Pinterest-Hilfe folgendes:

What if I don’t want images from my site to be pinned?
We have a small piece of code you can add to the head of any page on your site:

<meta name="pinterest" content="nopin" />

When a user tries to pin from your site, they will see this message:
„This site doesn’t allow pinning to Pinterest. Please contact the owner with any questions. Thanks for visiting!“

Über Sinn und Wirksamkeit eines Pinterest-Schutzes kann man geteilter Meinung sein. Ich sehe das auch nicht als Schutz an, sondern eher als eine einfache Zugangserschwerung für ahnungslose Nutzer. Verhindern kann man das Pinnen von Bildern damit nicht wirklich.

Kleinigkeiten

Eine weitere „Schutzmöglichkeit“ habe ich schon seit längerer Zeit unwissentlich in meinen Blogs eingebaut. Ich verwende normalerweise in meinen Blogartikeln relativ kleine Vorschaubilder, die dann auf das große Bild verlinken. Wenn ich nun einen Artikel bei Pinterest zum Pinnen eingebe, erhalte ich folgende Meldung:

Pinterest: No large images found

Aha, die Bilder sind für Pinterest also zu klein. Pinterest wertet auf der Seite nur sichtbar per img-Tag eingebunden Bilder aus, nicht aber Links auf Bilder. Meine Vorschaubilder haben auf der längeren Seite max. 160 Pixel (z.B. 160×120 oder 120×160), das ist demnach zu wenig. Wo bei Pinterest die Größen- oder besser Kleinengrenze liegt, weiß ich nicht.

Umwege

Da ich nun seit ein paar Tagen selbst bei Pinterest angemdeldet bin und das eine oder andere Bild dort pinnen will, muß ich immer einen Umweg machen.

Ich gebe zunächst die URL des großen Bildes an und ändere nachträglich aber den Link. Ich will ja keine Hotlinks auf meine Bilder produzieren und außerdem soll ein Klick nicht zum Bild, sondern zu meiner Seite, zu meinem Artikel führen.

Das ist zwar etwas umständlich, aber etwas Besseres fällt mir im Moment dazu nicht ein. Vielleicht hat ja jemand eine Idee. :-)

Keine Kommentare »

Googles neuer Dating-Dienst G• (G-Punkt)

Auf den Punkt gebracht

HerzNach G+ vor etwa einem Jahr startet in den nächsten Tagen der neue Google-Dating-Dienst G• (G-Punkt, in Anlehnung an G-Plus), wie beim TagSeoBlog und auch im Google-Blog zu lesen ist.

Der Dating-Service basiert auf den persönlichen Daten aus den GooglePlus-Profilen wie Geschlecht, Beziehungsstatus, Interessen und persönliche Vorlieben.

Das daraus gebildete Dating-Profil wird zusammen mit Geo-Location-Infos dazu verwendet, Links zu Dating-Vorschlägen abzuleiten. Irgendwie bekommt dann auch der Begriff Hotlink eine ganz neue Bedeutung.

Auch für Unterwegs

Google-Dating for mobileBesonders praktisch ist natürlich die Integration die Mobil-Version für Smartphones. Gab es da bisher schon direkt auf der Google-Startseite die Schnellsuche nach Restaurants, Cafés, Bars und Geldautomaten am aktuellen Standort, so kommen nun auch die Dating-Angebote hinzu.

Klar auch, daß man für das Date ein schönes Restaurant, Café oder eine Bar sucht. Ein Geldautomat in der Nähe kann dann schließlich auch ganz hilfreich sein. :-)

Google greift weiter an

Wie schon so oft bei neuen Google-Diensten ist das natürlich auch ein Angriff auf die jeweiligen Spezialisten, hier nun Dienste wie z.B. in Deutschland ElitePartner, eDarling und andere.

Ein Problem hat Google aber, das ist die noch nicht wirklich große Anzahl an GooglePlus-Mitgliedern. Zudem gibt es deutlich mehr männliche als weibliche GooglePlusser. Google muß also in nächster Zeit viele neue, vor allem auch weibliche Mitglieder gewinnen. Ein Schritt in diese Richtung könnte ein weiterer Google-Dienst werden, Google-Plinterest.

6 Kommentare »

IP-Adresse anonymisieren – warum MD5 nicht geeignet ist

Grundlagen zu IP-Adressen und Datenschutz überspringen

Die IP-Adresse

Damit das Internet überhaupt funktioniert, bekommt jeder Teilnehmer eine weltweit eindeutige Adresse zugeordnet. Derzeit ist das nach IPv4 eine 32-Bit Zahl, somit gibt es etwa 4,3 Milliarden mögliche Adressen im Internet. Diese 32-Bit werden üblicherweise in Gruppen zu 8 Bit (Oktett) aufgeteilt und die sich daraus ergebenden 4 Oktette mit einem Punkt getrennt als Zahlen von 0 bis 255 notiert.

Über die IP-Adresse 81.169.145.149 ist z.B meine Schnurpsel-Seite auf einem Web-Server bei Strato erreichbar. Wenn nun jemand meine Webseite aufruft, wird dem Webserver auch die IP-Adresse des Aufrufers mitgeteilt. Klar, der Server muß ja wissen, wo er die angeforderte Webseite als Antwort hinschicken soll.

Nebenbei legt der Webserver aber auch eine sogenannte Logdatei an, in welcher alle Zugriffe protokolliert werden und stellt die IP-Adresse auch dem für die Erstellung der Seite zuständigen Programm zur Verfügung. So speichert WordPress z.B. zu jedem Kommentar auch die IP-Adresse des Kommentators in der Datenbank.

IP-Adressen verwenden

Mit den gespeicherten IP-Adressen kann man so allerlei anstellen. Zum einen sind sie hilfreich, um unerwünschte Zugriffe abzuwehren. Wenn z.B. von einer bestimmten IP-Adresse regelmäßig viel Kommentarspam kommt, kann man den Webserver anweisen, einfach alles zu ignorieren, was von dieser IP-Adresse kommt.

Interessant ist auch die Möglichkeit, mit der IP-Adresse und weiteren Daten eine Statistik zu erstellen. So kann man herausfinden, wieviele Besucher wann welche Seiten aufrufen, woher so kommen und wohin sie gehen. Dazu ist es erforderlich, die Benutzer unterscheiden zu können, unter anderem durch ihre unterschiedlichen IP-Adressen. Wenn jemand mit der IP-Adresse 10.48.80.4 auf meine Seite zugreift, weiß ich zwar nicht, wer das ist, aber ich kann davon ausgehen, daß es jemand anderes war, als der mit der IP-Adresse 10.130.1.247.

Die personenbezogene IP-Adresse

Zwar kann ich nicht wissen, welcher konkrete Benutzer hinter einer IP-Adresse steckt, wohl aber der Internet-Service-Provider (ISP). Wenn ich über meinen Internetzugang per DSL mit dem Internet verbunden bin, bekomme ich eine IP-Adresse von meinem Provider 1&1 zugeteilt. Der Internetanbieter speichert diese Zuordnung technisch bedingt zumindest für die Dauer der Verbindung, schließlich muß auch er wissen, zu welchem Kunden (DSL-Anschluß) er die Daten für die IP-Adresse schicken muß.

Für Abrechnungszwecke wird diese Verknüpfung eines Kunden mit einer IP-Adresse zu einem bestimmten Zeitpunkt möglicherweise auch länger gespeichert. Seit einiger Zeit ist diese Vorratsdatenspeicherung per Gesetz sogar unabhängig davon für mindestens 6 Monate vorgeschrieben.

Somit kann meine IP-Adresse durch den ISP mir als Kunden, und damit einer Person zugeordnet werden. Für sich allein genommen ist die IP-Adresse keine personenbezogenes Datum, sie wird es aber durch die beim Internetanbieter gespeicherten Informationen.

Speicherung personenbezogener Daten

Da der Schutz der Privatsphäre und persönlicher Daten ein hohes Gut ist, darf nicht jeder einfach ohne Einwilligung personenbezogene Daten speichern. Auch hier gibt es entsprechende gesetzliche Regelungen, einerseits im Bundesdatenschutzgesetz und andererseits im Telemediengesetz.

Wenn man nun eine IP-Adresse als personenbezogenes Datum betrachtet und andererseits solche Daten, insbesondere ohne Einwilligung des Betroffenen, nicht gespeichert werden dürfen, ist das Speichern der IP-Adresse, wie es bisher gehandhabt wird, nicht zulässig.

Der einfachts Ausweg ist, die IP-Adresse nicht zu speichern. Solange das im eigenen Einflußbereich liegt, ist das die radikalste und einfachst Lösung. Damit hat man aber keine Möglichkeit mehr, eine IP-Adresse für die Abwehr unerwünschter Zugriff oder edie Webseiten-Statistik zu verwenden.

Die zweite Möglichkeit ist, die IP-Adresse in anonymisierter Form zu speichern. Damit geht die Zuordnung der IP-Adresse zu einer Person verloren, die Unterscheidbarkeit bleibt aber idealerweise weitestgehed erhalten.

Wie anonym ist eine Anonymisierung wirklich?

Ich war ja dem Irrtum auch erlegen, daß man mit einer kryptographischen Hashfunktion wie MD5 eine IP-Adresse anonymisieren kann. Auch wenn MD5 mittlerweile als kryptographisch nicht mehr wirklich sicher gilt, sollte es doch für eine Anonymisierung reichen. Das tut es prinzipiell auch, aber nur dann, wenn die zu anonymisierenden Daten nicht aus einer überschauberen Datenmenge mit bekannter Struktur bestehen.

IP-Adressen haben aber eine wohlbekannte Struktur und auch wenn 4,3 Milliarden Möglichkeiten erstmal nach viel klingt, ist es eine gut überschaubare und handhabbare Größenordnung. Bei mit MD5 „anonamisierten“ IP-Adressen ist es einfach möglich, die zu einem MD5-Wert gehörende Adresse durch probieren herauszufinden. Man bildet einfach von alle IP-Adressen den MD5-Wert und vergleicht ihn mit dem unbekannten Wert. Dann ist es nur eine Frage der Zeit, bis man die passende IP-Adresse gefunden hat.

md5 to ipUm mal ein Gefühl dafür zu bekommen, wie schnell das geht, habe ich eine kleines PHP-Programm geschrieben und hier auf dem Server laufen lassen. Um den Server nicht zu sehr zu belasten und auch das 30 Sekunden-Zeitlimit nicht zu überschreiten, lasse ich das erste Oktette nicht berechnen, beleiben theoretisch gut 16 Millionen Versuche.

Kurz und gut, meine verkürzte IP-Adresse war nach gut 9 Millionen Versuchen und in etwa 13 Sekunden ermittelt. Im ungünstigsten Fall und mit der kompletten IP-Adresse dürfte das etwa 2 Stunden dauern. Wobei PHP als nicht besonders schnell gilt und das zudem auf einem Webserver läuft, den ich mir mit vielen anderen Kunden teile. Damit ist klar, eine mit MD5 anonymisierte IP-Adresse ist nicht anonym, da sie in relativ kurzer Zeit rekonstruiert werden kann.

So eine MD5-IP-Adresse hat noch eine anderen Nachteil, sie sieht nicht mehr wie eine IP-Adresse aus. Statistikprogramme könnten darüber möglicherweise stolpern.

Und nun?

Anonymisierung durch Weglassung

Die einfachst Möglichkeit ist, wenn eine IP-Adresse gespeichert werden soll, diese komplett auf Null zu setzen, also 0.0.0.0. Das ist dann wunderbar anonym, allerdings sind alle IP-Adressen identisch. So wird das nichts mit der Statistik und der Spamabwehr.

Aber vielleicht genügt es ja schon, nur einen Teil der IP-Adresse wegzulassen bzw. mit einem festen Wert zu belegen. Aber was und wieviel kann man weglassen, so daß kein zu großer Fehler entsteht, die Anonymität aber trotzdem gewahrt wird. Meine erste Idee war, das am weitesten links (höchstwertige) Oktett zu anonymisieren, anderenorts habe ich gelesen, daß das am weitesten rechts liegende (niederwertigste) Oktett genommen wird. Um zu sehen, wie sich die verschiedenen Möglichkeiten auswirken, habe ich die nicht anonymisierten Logdaten einer Woche genommen, und die Anzahl der unterschiedlichen IP-Adressen mit der Anzahl nach der Anonymisierung verglichen:

Methode Anzahl Abw. abs Abw. rel
Original 19429 0 0.00%
1. Oktett 19416 13 0.07%
1. und ¼ 2. Oktett 19381 48 0.25%
1. und ½ 2. Oktett 19252 177 0.91%
1. und ¾ 2. Oktett 18712 717 3.69%
1. und 2. Oktett 16819 2610 13.43%
4. Oktett 17080 2349 12.09%

 
Insgesamt gab es in der betrachteten Woche 145636 Zugriffe von 19429 unterschiedlichen IP-Adressen (7.50 Requests/IP). Den nicht anonymisierten Wert findet man in der ersten Zeile, alles bleibt erhalten, Fehler 0%. In der zweiten Zeile habe ich das 1. Oktett mit einer 10 ersetzt. Damit landen die IP-Adressen im Bereich der privaten IP-Adresen, die so in freier Wildbahn nicht anzutreffen sind. In den weiteren Zeilen habe ich zum auf 10 gesetzten ersten Oktett noch jeweils zwei, vier und sechs Bit des zweiten Oktetts auf 0 gesetzt, um den Anonymisierungsgrad zu erhöhen. In der letzten Zeile wurde schließlich nur das 4. Oktett auf Null gesetzt.

Der Fehler ist bis zu „1. und ¼ 2. Oktett“ oder sogar „1. und ½ 2. Oktett“ aus meiner Sicht akzeptabel. Mit so einem Fehler könnte man für statistische Auswertungen gut leben. Bei der Variante mit dem 4. Oktett ist der Fehler schon recht hoch, vor allem deutlich höher als beim „nur 1. Oktett“, obwohl ja die anonymisierte Datenmenge von 8 Bit gleich ist. Der Unterschied ist wohl damit zu erklären, daß meine Webseite nur vorwiegend regionales Publikum hat. So kommen die meisten Besucher aus Deutschland und damit habe diese vorwiegend IP-Adressen aus dem Pool einiger, weniger Internetanbieter. Diese unterscheiden sich dann halt oft nur in der letzten Stelle der IP-Adresse.

Wirklich anonym?

Das eine „Anonymisierung“ mittels MD5 nicht funktioniert ist klar, inwieweit das teilweise Weglassen von Daten der IP-Adresse als Anonymisierung reicht, kann ich nicht beurteilen. Zumindest läßt sich die IP-Adresse nicht mehr unmittelbar zurückrechnen, da die Daten teilweise gelöscht werden. Vielleicht kann sich ja hier jemand dazu äußern, der sich mit sowas auskennt.

5 Kommentare »

WP 2.3 – Anonym up-to-date bleiben – Plugin

Vorgestern hatte ich meinen Hack gegen die Übertragung einiger Daten (Blog-URL, aktive Plugins) beim neuen WP 2.3 Versionscheck vorgestellt. Nun scheint es aber eine gewisse Unsicherheit bei oder Abneigung gegen die Verwendung der, von WP selbst als veraltete bezeichneten, my-hacks.php zu geben. Deshalb habe ich das Ganze hier noch mal als Plugin verpackt.
Man bedenke aber, das man zum Aktivieren des Plugins im Backend die Plugin-Seite aufrufen muß und dadurch mindestens einmal alle Daten ungefiltert an api.wordpress.org übertragen werden.

Wenn man sein System von einer älteren WordPress-Version updatet, ist das kein Probelm. Dann kann man das Plugin einfach vor dem Update installieren und aktivieren. Bei einer Neuinstalltion müßte man aber, bevor man irgendwas anderes macht, das Plugin direkt in der Datenbank aktivieren, was ein bißchen fummelig ist. Zudem setzt man die Filterung auch außer Kraft, wenn man z.B. mit der Funktion „Deaktivier alle Plugins“ alle Plugins ausschaltet.

NEU: Auch die Pluginversion kann bei einer Neuinstallation verwendet!

Wie auch immer, hier nun das „123 Anonymer Versionscheck“-Plugin.

Download: 123 Anonymer Versionscheck 0.10

Die Funktionsweise entspricht exakt der Hack-Version. Weitere Informationen bitte dort nachlesen.

Weitere Plugins zum Thema

  • Hannes ersetzt in seinem Plugin die Updatefunktion mit einer angepaßten eigenen Version und reduziert dort auch die übertragene Pluginliste auf die notwendigen Daten.
  • Filosofo’s Tinfoil-Hat Plugin bringt gleich ein komplett neues Updatesystem mit, doktert also nicht nur an den Symptomen rum, sondern mach gleich „Nägel mit Köpfen“.

Diese Plugins lassen sich auch mit dieser Methode bereits bei der Neuinstallation aktivieren.

8 Kommentare »

WordPress 2.3 – Anonym up-to-date bleiben

Heute kommt, so der Terminplan eingehalten wird, die neue WordPressversion 2.3 raus. Neben einigen eher für Plugin-Programmierer interessanten Änderungen der Datenbankstruktur dürfte sich der WordPressnutzer mehr für die neuen Funktionen intessieren. Was es so an Neuerungen gibt, kann man im WP-Deutschland-Blog nachlesen, da wären z.B. Tags nebst Tagwolke, SEO-Verbesserungen und Updatebenachrichtigung.

Letzteres sorgt aber bereits jetzt für Unmut in der WP-Welt, denn diese durchaus sinnvolle Funktion überträgt beim Überprüfen der Versionsinformationen auch Daten, die dafür nicht erforderlich wären, so z.B. die Adresse (URL) des Blogs. Im WP-Forum wird bereits darüber diskutiert und das eine oder ander Blog berichten darüber. Es gibt auch schon Plugins, welche die Updatebenachrichtigungsfunktionen deaktivieren, nur dann werden gar keine Updateinformationen mehr angezeigt.

NEU: Jetzt auch als Plugin.

Ich beschreibe im Folgenden eine Möglichkeit, wie man die Versionsüberprüfung beibehalten kann, ohne aber die eigene Blog-URL an wordpress.org zu übertragen. Dafür kommt mal wieder meine Lieblingskind, die my-hacks.php zum Einsatz. Falls diese Datei im WordPress-Wurzelverzeichnis nicht existiert, legt man sie neu an. Dann kommt der folgende Code dort hinein:

<?php
// Namen der Update- und Check-Funktion
define('PLW_PLG_FUNC', 'wp_update_plugins');
define('PLW_VER_FUNC', 'wp_version_check');

// anonymisiert die URL
function plw123_anon_url() {
 return "http://example.org";
}

// "anonymisiert" aktive Plugins
function plw123_no_active_plugins() {
 return "a:0:{}";
}
// Ersetzt die originale 'wp_version_check'
function plw123_anon_version_check() {
 if( function_exists( PLW_VER_FUNC ) ) {
  add_filter( 'pre_option_home', 'plw123_anon_url', 99999 ); 
  call_user_func( PLW_VER_FUNC );
  remove_filter( 'pre_option_home', 'plw123_anon_url', 99999 ); 
 }
}

// Ersetzt die originale 'wp_update_plugins'
function plw123_anon_update_plugins() {
 if( function_exists( PLW_PLG_FUNC ) ) {
  add_filter( 'pre_option_home', 'plw123_anon_url', 99999 ); 
  add_filter( 'pre_option_active_plugins', 'plw123_no_active_plugins', 99999 ); 
  call_user_func( PLW_PLG_FUNC );
  remove_filter( 'pre_option_active_plugins', 'plw123_no_active_plugins', 99999 ); 
  remove_filter( 'pre_option_home', 'plw123_anon_url', 99999 ); 
 }
}

// Versionschek entfernen und durch eigene Funktion ersetzen
if( function_exists( PLW_VER_FUNC ) ) {
 remove_action( 'init', PLW_VER_FUNC );
 add_action( 'init', 'plw123_anon_version_check' );
}

// Plugin-Update entfernen und durch eigene Funktion ersetzen
function plw123_change_update_plugins () {
 if( function_exists( PLW_PLG_FUNC ) ) {
  remove_action( 'load-plugins.php', PLW_PLG_FUNC );
  add_action( 'load-plugins.php', 'plw123_anon_update_plugins' );
 }
}
add_action( 'admin_menu', 'plw123_change_update_plugins' );
?>

Download: my-hacks.php (als ZIP)

Der Trick besteht darin, das man während der Ausführung der wp_version_check und wp_plugin_updates Funktion ein Filter installiert, welches nicht die URL sondern einen beliebigen anderen Text zurückgibt. Diesen kann man in der Funktion plw123_anon_url festlegen, im Beispiel wird http://example.org zurückgegeben. Danach wird das Filter wieder entfernt. Um den Funktionsaufruf so „einrahmen“ zu können, werden die originalen Funktionen mit remove_action entfernt und statt dessen die eigenen Funktionen mit add_action installiert.

Nachtrag (24.09.2007 15:10): Ich habe nun noch zusätzlich die „Anonymisierung“ der aktiven Plugins eingebaut., das heißt, es wird keine Information mehr übertragen, welche Plugins auch tatsächlich aktiv sind.

Und dann gäbe es noch ein klassisches Henne-Ei-Problem, wenn der Code in einem Plugin verpackt wäre (was natürlich auch möglich ist). Um das Plugin zu aktvieren, muß man im Adminbereich die Pluginseite aufrufen und schwupps werden die Daten ersteinmal an WordPress gesendet. Beim Update von einer älteren Version ist das kein Problem, da kann man das Plugin vor dem Update einspielen und aktivieren. Bei einer Neuinstallation hat man aber so keine Chance. Deshalb ist das in der my-hacks.php besser aufgehoben. Dann muß diese aber auch bei „Einstellungen“ -> „Verschiedenes“ aktiviert werde (vor dem Update):

[x] Die veraltete my-hacks.php-Datei unterstützen.

Bei einer Neuinstallation muß man, wenn man ganz Sicher gehen will, die entsprechende my-hacks.php gleich mit kopieren und unmittelbar nach den WP-Installationsschritten vor dem ersten Aufruf zunächst direkt in der Datenbank die My-Hacks-Option aktvieren. Dazu in der Tabelle wp_options den Datensatz mit dem option_name hack_file suchen und den Wert für option_value zu 1 ändern.

Ein Problem gibt es allerdings. Sollten sich die Funktionsnamen oder der Ablauf der Versionskontrolle in zukünftigen WordPressversionen ändern, dann funktioniert der Hack nicht mehr und muß angepaßt werden.

14 Kommentare »