So stoppen Sie Datenklau aus MySQL
Getäuschte Diebe

Big DataData & StorageDeveloperIT-ProjekteSoftware

Datendiebstahl gilt vielerorts als Kavaliersdelikt. Internet Professionell zeigt, wie Sie Datendiebe in die Irre leiten und ihnen das Handwerk legen.

Gestohlenes Wissen

So stoppen Sie Datenklau aus MySQL

Im Internet sind viele Datenbanken frei zugänglich. Wertvolles Wissen, das häufig mühsam und teuer zusammengetragen wurde, wird dem Besucher kostenlos zur Verfügung gestellt. Geld wird in der Regel mit Werbung oder verlinkten Services verdient. Datendiebe haben da leichtes Spiel. Ganz gleich ob über den Browser, selbst programmierte HTTP-Clients oder mit Perl oder PHP direkt vom Webserver aus: Die Seiten werden durchforstet, Inhalte ausgelesen und anhand verschiedener Kriterien ? etwa HTML-Tabellen-Tags ? in brauchbare Daten umgewandelt. Ganz abgesehen vom geistigen Recht an den Daten entstehen dem Webseiten-Betreiber allein durch den erzeugten Traffic enorme Kosten. Grund genug, sich Gedanken über Strategien zu machen, diesen Datendieben das Leben so schwer wie möglich zu machen.


Den Eindringling entdecken

So stoppen Sie Datenklau aus MySQL

Am Anfang steht meist eine Vermutung, etwa wenn auf fremden Webseiten plötzlich Informationen erscheinen, die eigentlich nur von Ihnen stammen dürften. Haben Sie diesen Verdacht, können Sie erst dann eine definitive Aussage treffen, wenn Sie die Seitenanfragen protokollieren. Dies sollte am Anfang jeder Seite noch vor den darstellenden HTML-Befehlen geschehen. Sie benötigen dazu eine Datenbanktabelle mit zwei Datenfeldern: Eines für die IP-Adresse des Besuchers und eine, um die Zeit festzuhalten. Sie können diese Tabelle in PHP über

mysql_query("
CREATE TABLE IF NOT EXISTS 'stat' (
'datum' DATETIME NOT NULL ,
'ip' VARCHAR( 15 ) NOT NULL);
");

erstellen. Durch die Angabe von IF NOT EXISTS wird diese Tabelle nur dann erzeugt, wenn sie noch nicht vorhanden ist. Um den Abruf jeder Seite zu protokollieren, wird zu Beginn mit

$JETZT = date("Y-m-d H:i:s");
$sql = "INSERT INTO `stat` ('datum', 'ip') VALUES ('$JETZT', '$REMOTE_ADDR')";
$result = mysql_query($sql);

ein Datensatz mit der aktuellen Uhrzeit in diese Tabelle eingefügt. Nun wird anhand der IP-Adresse jeder Seitenaufruf protokolliert. Mit einer SQL-Abfrage kann jetzt geprüft werden, welche IP-Adressen häufig auf die Site zugreifen. Dazu verwendet man ein Tool wie PhpMyAdmin (www.phpmyadmin.org) oder schreibt ein kurzes Skript, in dem mit einer SELECT distinct-Abfrage die 20 IP-Adressen mit den häufigsten Zugriffen aufgelistet werden.

$JETZT = date("Y-m-d");
$sql = "SELECT distinct(ip),count(ip)
AS ANZAHL FROM 'stat' WHERE
datum > '$JETZT' GROUP BY 'ip'
ORDER BY ANZAHL Limit 0,20";
$result = mysql_query($sql);
echo "

";
while ($ds = mysql_fetch_array($result))
echo "

";
echo "

$ds[ip] $ds[ANZAHL]
";

Ist das Ergebnis auffällig, also greift ein und dieselbe IP-Adresse viele hundert oder tausend Male am Tag auf Ihre Site zu, könnte es ein Indiz dafür sein, dass hier ein Datendieb am Werk ist.


Suchroboter willkommen

So stoppen Sie Datenklau aus MySQL

Einen genaueren Einblick erhalten Sie, wenn sie bei einer WHOIS-Abfrage, beispielsweise unter www.geektools.com/whois.php, prüfen, wem diese IP-Adresse gehört. Denn es könnte beispielsweise auch Google, MSN oder ein anderer Suchmaschinen-Roboter sein. Und diesen wollen Sie natürlich keine Knüppel zwischen die Beine werfen.

Da der Besuch von Searchbots durchaus erwünscht ist, benötigt man zunächst ein Mittel, um diese Suchmaschinenroboter mit Hilfe von PHP auch zu identifizieren. Dazu dient die Systemvariable $HTTP_USER_AGENT, anhand der normalerweise die Browserversion ermittelt wird. Suchmaschinenroboter geben sich ebenfalls anhand dieser Informationen zu erkennen. So liefert der Googlebot beispielsweise eine Information wie »Mozilla/5.0 (compatible; Googlebot/2.1?«. Anhand des Namens kann dann ermittelt werden, ob es sich um einen Roboter handelt, etwa mit

$trackrobot = "";
$Agent = trim( strtolower ($_SERVER['HTTP_USER_AGENT']));
if (stristr($Agent ,"googlebot"))
$trackrobot="Google";
elseif (stristr($Agent ,"msnbot"))
$trackrobot="MSN"; // usw.
elseif (stristr($Agent ,"Yahoo! Slurp"))
$trackrobot="Yahoo";

ine Liste mit weiteren Robot-Kennungen finden Sie unter www.psychedelix.com/agents.html. Nach diesem Teilskript steht fest, ob es sich um einen Roboter handelt oder nicht. Ist nämlich die Variable $trackbot leer, also ist empty($trackbot) wahr, ist es ein normaler Benutzer, andernfalls eine Suchmaschine.


Grabber ermitteln

So stoppen Sie Datenklau aus MySQL

Nun gilt es im Skript zu ermitteln, ob der aktuelle Aufruf von einem Datensammler stammt oder nicht. Bei der Beantwortung stellt sich die Frage, worin sich der normale Besucher und ein automatisierter Grabber unterscheiden. Auch normale Besucher laden schon einmal innerhalb relativ kurzer Zeit zwei oder mehr Seiten. Beispielsweise wenn sie sich auf bekannten Seiten zu einer bestimmten Stelle hinklicken.

Doch sind mehr als zehn Seiten pro Minute äußerst selten. Ein Programm, das Webseiten entlang der Hyperlinks durchläuft, wird hingegen permanent auf die Inhalte zugreifen und in der Regel viele hundert Zugriffe pro Minute produzieren. Mit Hilfe der Datenbank stat lässt sich leicht bestimmen, ob es sich nach diesen Kriterien um einen normalen Besucher handelt. Grundsätzlich geht man zunächst einmal davon aus, dass der Besucher in Ordnung ist.

$OK = true;

Um sich zu vergewissern, generiert man als Erstes einen Datumseintrag im Date-Time-Format zum Zeitpunkt eine Minute zuvor.

$DATUM = date("Y-m-d H:i:s", time()-60);

Anschließend wird eine SQL-Abfrage generiert, bei der die Anzahl der Datensätze ermittelt wird, die der Benutzer mit der aktuellen IP-Adresse erzeugt hat.

$sql = "SELECT COUNT(*) FROM statistic
WHERE 'ip' like '$REMOTE_ADDR'
AND datum>'$DATUM'";
$result = mysql_query($sql);
list($ANZAHL) = mysql_fetch_row($result);

Waren es mehr als zehn Aufrufe innerhalb der letzten 60 Sekunden, kann man annehmen, dass es sich nicht um einen normalen Benutzer handelt.

if ($ANZAHL>10) $OK = false;

Damit der Grabber nicht nach einer Pause von ein paar Sekunden wieder als normaler Besucher angesehen wird, sollte die Abfrage erneut mit einem größeren Zeitraum, etwa 60 Minuten, gestellt werden, um zu sehen, ob mehr als hundert Seiten ? als angenommenes Maximum pro Stunde für einen normalen Besucher ? abgefragt werden.

else {
$DATUM = date("Y-m-d H:i",time()-3600);

// $sql = wie oben
// $result = wie oben
// list($ANZAHL) = wie oben
if ($ANZAHL>100) $OK = false;
}


Daten vorenthalten

So stoppen Sie Datenklau aus MySQL

Eine Variante, den Datendieb abzustrafen, ist, ihm keine weiteren Daten zu liefern und das Skript mit exit; zu beenden. Als Alternative ist eine Umleitung mit

header ("Location: datendieb.php");

denkbar.

Sehr viel geschickter ist es, Daten zu liefern, diese aber zu verfälschen. Was damit gemeint ist, soll ein in der Praxis erfolgreiches Beispiel zeigen. Öffnen Sie in Ihrem Browser die Adresse www.bilder-dienste.de/digitalfotos-entwickeln-chemnitz.php3. Sie sehen eine Liste mit Adressen samt Postleitzahl und Telefonnummer. Die erste Adresse ist in 09117 Chemnitz und hat die Vorwahl 0371. Laden Sie die Seite erneut mit der Schaltfläche Aktualisieren in ihrem Browser. Wiederholen Sie nun knapp ein Dutzend Mal diese Aktion und achten Sie darauf, dass die Seite komplett geladen wird. Schauen Sie nun noch einmal genau hin. Aus 09117 wurde 08774 und aus 0371 wurde 0247. Das Prinzip ist simpel. Es wurden lediglich einige Ziffern ausgetauscht, wobei solch signifikante Merkmale wie die Null, wie bei allen Vorwahlen als erstes Zeichen auftritt, belassen wurden. Man muss darauf gefasst sein und mehrmals hinschauen, um den Fehler zu erkennen.

Für einen Grabber sind die Daten jedoch ? sofern er das Spiel nicht durchschaut ? wertlos, weil Postleitzahl oder Vorwahl durchaus plausibel sein können. Alternativ lassen sich natürlich auch Buchstaben austauschen. Auch hier sollte darauf geachtet werden, dass ähnliche Buchstaben ausgetauscht werden also beispielsweise ein »i« mit einem »í« (Akzent) oder ein »O« mit einer »0« (Null). Die Arbeit kann beispielsweise eine globale Funktion wie die folgende übernehmen:

function fakeit($wert, $OK) {
if ($OK) return $wert;
$erg = "";
for ($i=0; $i
elseif ($ch== "1") $ch= "7";
elseif ($ch== "2") $ch= "3";
elseif ($ch== "3") $ch= "2";
elseif ($ch== "4") $ch= "7";
// usw.
$erg .= $ch;

}
return $erg;
}

Anstatt einer Ausgabe der Datenbankinhalte über echo $DATENFELD; erfolgt dann die Ausgabe mit Hilfe der Funktion: echo fakeit($DATENFELD, $OK); Nun kann der Datendieb Ihre Daten zwar stehlen, bietet auf seinen Seiten jedoch falsches Informationsmaterial an, was über kurz oder lang zu unzufriedenen Besuchern führt.


Grabbern Einhalt gebieten

So stoppen Sie Datenklau aus MySQL

Zunächst einmal sollten Sie recherchieren, ob Ihr Datenmaterial von fremden Seiten verwendet wird. Dies ist besonders einfach, wenn ein Grabber in Ihre Falle getappt ist und das verfälschte Datenmaterial ungeprüft verwendet. Im oben genannten Beispiel, wo aus »09117 Chemnitz« der Eintrag »08774 Chemnitz« wird, reicht Letzteres als Suchbegriff. Allerdings sollten Sie bei Google den Suchbegriff in doppelte Anführungszeichen setzen, damit nur die genaue Kombination gefunden wird und nicht Seiten, die vom Ort Chemnitz und vom Ort Bayerbach mit der telefonischen Vorwahl 08774 handeln.

Sollten Sie einen Datendieb ausgemacht haben, können Sie unter verschiedenen juristischen Gesichtspunkten gegen ihn vorgehen. Die Wege vom Wettbewerbsverstoß bis hin zur Urheberrechtsverletzung sollte in jedem Fall ein Rechtsanwalt klären. Der juristische Weg ist jedoch in der Regel sehr schwierig und mit hohen Kosten verbunden. Die gute Nachricht ist, dass eine Klage bei einer Rechtsverletzung immer am Ort eingereicht werden muss, an dem die Verletzung stattgefunden hat. Da diese eindeutige Ortsbestimmung im Internet nicht möglich ist, kann man jeden Ort wählen ? also beispielsweise den Heimatort, wodurch für den eigenen Anwalt zumindest keine Reisekosten entstehen. Zudem kennt er in der Regel die Richter besser und weiß um deren Besonderheiten.

Haben Sie also die Vermutung, dass ein Mitbewerber Ihr Datenmaterial für eigene Auftritte verwendet, müssen Sie ihm dies nachweisen. Dazu sichern Sie die entsprechenden Seiten, auf denen eindeutig der Datendiebstahl ersichtlich ist, sowohl als Screenshot als auch über Datei, Speichern unter. Achten Sie beim Screenshot darauf, dass Datum und Zeit ersichtlich sind. Dies können Sie beispielsweise dadurch erreichen, dass Sie den Datumsdialog mit einem Doppelklick auf die Uhrzeit unten rechts öffnen. Machen Sie von mehreren Seiten Screenshots, drucken Sie diese aus und lassen Sie sich Zeit und Datum von einer dritten Person bestätigen.

Formulieren Sie anschließend das Verfahren, nach dem Sie die Zeichen austauschen, so simpel wie möglich. Eben so, dass es auch ein Jurist verstehen kann. Dann sollte die Voraussetzung für einen Rechtsstreit gegeben sein. Bevor Sie jedoch zum Angriff übergehen, sollten Sie in jedem Falle auch Ihre Website wasserdicht machen und Impressum, Nutzungs- und allgemeine Geschäftsbedingungen von Ihrem Rechtsanwalt prüfen lassen. Sonst könnte der Schuss nach hinten losgehen.