IP-Vergleich: Mittel gegen Trackback-Spam?
26. September 2008
Kann ein IP-Vergleich, wie er zum Beispiel im Simple Trackback Validation Plugin von Michael Wöhrer (für Wordpress 2.x) realisiert wird, hilfreich sein, um SPAM zu verhindern? Auch Grischa hat einiges zu diesem Thema geschrieben.
Klar, schaden kann so ein Vergleich nicht, aber kann er wirklich effektiv Trackback-SPAM verhindern?
Der IP-Vergleich
Nachfolgend ein Code-Abschnitt aus der simple-trackback-validation.php, in der der IP-Vergleich stattfindet:
Was passiert hier? In Zeile 1 wird die IP-Adresse des Trackback-Senders (Trackback-Client) ermittelt. Damit erhalten wir also die Adresse des Servers, auf dem das Sender-Skript ausgeführt wurde. In Zeile 3 wird aus der URL des Artikels (Client-Artikel) dessen Hostname ermittelt. Hat man den Hostname, dann kann man in Zeile 4 mittels gethosbyname() dessen zugehörige IP-Adresse beziehen. Damit erhält man also die Adresse des Servers, auf dem sich der Client-Artikel befindet. Nun hat man zwei IP-Adressen, die man dann in Zeile 6 miteinander vergleicht. Stimmen diese überein, dann hat der Trackback den gleichen Ursprung und ist somit (wahrscheinlich) kein SPAM. Andernfalls ... Handelt es sich dann wirklich definitv um SPAM??? Nun, dass ist die Frage.
Verwendet ein ISP Proxyserver (oder Network Address Translation), was mit hoher Wahrscheinlichkeit der Fall sein wird, dann kann man zwar die beiden IP's ermitteln, ein Vergleich ist aber wenig sinnvoll. Warum? Die beiden Anfragen könnten über zwei unterschiedliche Proxyserver laufen, mit dem Ergebnis, dass die beiden ermittelten IP's nicht übereinstimmen werden.
Ich hatte zu Testzwecken ein Skript geschrieben, das Trackbacks an meinen Blog versendet. Dies hatte ich dann auf meinen Webspace hochgeladen und einen Trackback an diesen Blog gepostet. Alles ging gut, nur im Logfile fand ich zwei unterschiedliche IP's vor. Einmal die Remote-Adresse 81.169.145.25 und dann die durch gethostbyname() ermittelte URL-IP 81.169.145.91. Beide stimmen fast überein, aber eben leider nur fast.
Dieses eine Gegenbeispiel reicht aus, um den IP-Vergleich für mich nicht in Betracht kommen zu lassen.
Such' den Link!
Es gibt eine zweite Möglichkeit, die Michael in seinem Plugin einsetzt. Man kennt ja die URL des Artikels, den der Sender (Trackback-Client) dem Empfänger (Trackback-Server) übergibt - genau, PermaLink nennt sich das Teil. Wir können nun die zu diesem PermaLink gehörige Seite nach einem Link durchsuchen, der auf unseren Blog verlinkt. Falls dies nicht der Fall ist, so wird es sich bei dem Trackback wohl wieder um SPAM handeln ... Oder hat der Andere einfach bloß den Link vergessen?
Hm, auch dieser Ansatz gefällt mir nicht besonders. Zum einen möchte ich niemanden dazu zwingen, in seinem Artikel einen Link auf meinen Artikel zu setzen (selbst wenn mein Artikel ihn inspiriert haben sollte). Man sollte hier auf die Fairness des anderen Bloggers vertrauen. Außerdem müsste ich ja ständig bzw. in gewissen Abständen prüfen, ob der Link noch da ist. Womit wir beim zweiten Problem wären.
Angenommen man bekommt 40.000 Trackbacks pro Tag, dann wünsche ich viel Spaß dabei, nach einem Link - der auf unseren Blog "zeigt" - zu scannen. Ein Blog soll "hauptberuflich" Artikel anzeigen und nicht seine Zeit damit verbringen, auf wildfremden Webseiten nach Link-Einträgen zu suchen. Womit auch dieser Ansatz (aus Kostengründen) für mich nicht in Frage kommt.
Was bleibt dann noch?
Man könnte per .htaccess-Datei versuchen, SPAM zu verhindern. Einen Artikel darüber findet man bei Grischa.
Eine weitere Möglichkeit besteht im Moderieren von Trackbacks. Dies ist meine bevorzugte Methode. Das Ganze habe ich wie folgt gelöst:
Wichtig ist hier Schritt 2. Dadurch verhindere ich unnötigen Traffic auf der Datenbank, der durch das Eintragen der Trackback-Daten entstehen würde. Außerdem erspare ich mir so das Säubern der Datenbank (löschen der SPAM-Einträge). Alles was ich machen muss, besteht im Löschen der E-Mails (aber das macht man ja sowieso).
Klar, schaden kann so ein Vergleich nicht, aber kann er wirklich effektiv Trackback-SPAM verhindern?
Der IP-Vergleich
Nachfolgend ein Code-Abschnitt aus der simple-trackback-validation.php, in der der IP-Vergleich stattfindet:
....
1 $tmpSender_IP = preg_replace('/[^0-9.]/', '', $_SERVER['REMOTE_ADDR'] );
2
3 $authDomainname = stbv_get_domainname_from_uri($stbv_val['comment_author_url']);
4 $tmpURL_IP = preg_replace('/[^0-9.]/', '', gethostbyname($authDomainname) );
5
6 if ( $tmpSender_IP != $tmpURL_IP) {
7 $stbv_val['log_info'][]['info'] = 'Sender\'s IP address (' .
$tmpSender_IP . ') not equal to IP address of host (' .
$tmpURL_IP . ').';
8 $stbv_val['is_spam'] = true;
9 }
...
Was passiert hier? In Zeile 1 wird die IP-Adresse des Trackback-Senders (Trackback-Client) ermittelt. Damit erhalten wir also die Adresse des Servers, auf dem das Sender-Skript ausgeführt wurde. In Zeile 3 wird aus der URL des Artikels (Client-Artikel) dessen Hostname ermittelt. Hat man den Hostname, dann kann man in Zeile 4 mittels gethosbyname() dessen zugehörige IP-Adresse beziehen. Damit erhält man also die Adresse des Servers, auf dem sich der Client-Artikel befindet. Nun hat man zwei IP-Adressen, die man dann in Zeile 6 miteinander vergleicht. Stimmen diese überein, dann hat der Trackback den gleichen Ursprung und ist somit (wahrscheinlich) kein SPAM. Andernfalls ... Handelt es sich dann wirklich definitv um SPAM??? Nun, dass ist die Frage.
Verwendet ein ISP Proxyserver (oder Network Address Translation), was mit hoher Wahrscheinlichkeit der Fall sein wird, dann kann man zwar die beiden IP's ermitteln, ein Vergleich ist aber wenig sinnvoll. Warum? Die beiden Anfragen könnten über zwei unterschiedliche Proxyserver laufen, mit dem Ergebnis, dass die beiden ermittelten IP's nicht übereinstimmen werden.
Ich hatte zu Testzwecken ein Skript geschrieben, das Trackbacks an meinen Blog versendet. Dies hatte ich dann auf meinen Webspace hochgeladen und einen Trackback an diesen Blog gepostet. Alles ging gut, nur im Logfile fand ich zwei unterschiedliche IP's vor. Einmal die Remote-Adresse 81.169.145.25 und dann die durch gethostbyname() ermittelte URL-IP 81.169.145.91. Beide stimmen fast überein, aber eben leider nur fast.
Dieses eine Gegenbeispiel reicht aus, um den IP-Vergleich für mich nicht in Betracht kommen zu lassen.
Such' den Link!
Es gibt eine zweite Möglichkeit, die Michael in seinem Plugin einsetzt. Man kennt ja die URL des Artikels, den der Sender (Trackback-Client) dem Empfänger (Trackback-Server) übergibt - genau, PermaLink nennt sich das Teil. Wir können nun die zu diesem PermaLink gehörige Seite nach einem Link durchsuchen, der auf unseren Blog verlinkt. Falls dies nicht der Fall ist, so wird es sich bei dem Trackback wohl wieder um SPAM handeln ... Oder hat der Andere einfach bloß den Link vergessen?
Hm, auch dieser Ansatz gefällt mir nicht besonders. Zum einen möchte ich niemanden dazu zwingen, in seinem Artikel einen Link auf meinen Artikel zu setzen (selbst wenn mein Artikel ihn inspiriert haben sollte). Man sollte hier auf die Fairness des anderen Bloggers vertrauen. Außerdem müsste ich ja ständig bzw. in gewissen Abständen prüfen, ob der Link noch da ist. Womit wir beim zweiten Problem wären.
Angenommen man bekommt 40.000 Trackbacks pro Tag, dann wünsche ich viel Spaß dabei, nach einem Link - der auf unseren Blog "zeigt" - zu scannen. Ein Blog soll "hauptberuflich" Artikel anzeigen und nicht seine Zeit damit verbringen, auf wildfremden Webseiten nach Link-Einträgen zu suchen. Womit auch dieser Ansatz (aus Kostengründen) für mich nicht in Frage kommt.
Was bleibt dann noch?
Man könnte per .htaccess-Datei versuchen, SPAM zu verhindern. Einen Artikel darüber findet man bei Grischa.
Eine weitere Möglichkeit besteht im Moderieren von Trackbacks. Dies ist meine bevorzugte Methode. Das Ganze habe ich wie folgt gelöst:
1. Empfängt mein Skript einen Trackback, so schickt es mir eine E-Mail mit allen
Informationen bezüglich des Trackbacks (tb_id, title usw.).
2. Mein Skript trägt den Trackback aber noch nicht in die Datenbank ein!!
3. Statt dessen enthält die E-Mail einen Link, der als Parameter alle
Trackback-Daten übergeben bekommt.
4. Handelt es sich nicht um SPAM, so klicke ich den Link in der E-Mail und
übergebe die Parameter einem Skript, das dann letzten Endes den Trackback in
die Datenbank einträgt.
Wichtig ist hier Schritt 2. Dadurch verhindere ich unnötigen Traffic auf der Datenbank, der durch das Eintragen der Trackback-Daten entstehen würde. Außerdem erspare ich mir so das Säubern der Datenbank (löschen der SPAM-Einträge). Alles was ich machen muss, besteht im Löschen der E-Mails (aber das macht man ja sowieso).
Es wurde noch kein Kommentar abgegeben. Bist Du der Erste?
HILFE
Code-Beispiele werden mit den BBCodes [code][/code] dargestellt.
Jedes Tag muss eine Zeile für sich allein haben, d.h der Beispiel-Code
muss wirklich ZWISCHEN den Tags stehen. Beispiel:
Alles was zwischen den beiden Tags [register] und [/register] eingetragen wird, ist nur für registrierte (und eingeloggte) User sichtbar.
[code] ACHTUNG! HIER UMBRUCH WICHTIG. TAG [code] MUSS ALLEIN STEHEN
#include <stdio.h>
int main( void ){
return 0;
} ACHTUNG! HIER UMBRUCH WICHTIG. NACHFOLGENDES TAG [/code] MUSS ALLEIN STEHEN
[/code]Alles was zwischen den beiden Tags [register] und [/register] eingetragen wird, ist nur für registrierte (und eingeloggte) User sichtbar.
Dein Name *
Deine Email
Deine Website
Vorschau