Tutorials - HTTP-Teergruben

Sprachenübersicht/Programmierung/PHP

HTTP-Teergruben

Diese Seite wurde 2455 mal aufgerufen.

Dieser Artikel wurde in einem Wikiweb System geschrieben, das heißt, Sie können die Artikel jederzeit editieren, wenn Sie einen Fehler gefunden haben, oder etwas hinzufügen wollen.

Editieren Versionen Linkpartnerschaft Bottom Printversion

Keywords: http teergruben honeypots anti spammer

Inhaltsverzeichnis



Einführung Top


Aktuelle Zahlen besagen, dass der Spamversand weltweit 2/3 bis 90% des Mailaufkommens ausmacht. Dies führt dazu, dass immer bessere Filter und Tricks entwickelt werden müssen, um Spam zuverlässig zu erkennen. Doch diese Mittel bekämpfen nur die Symptome und nicht die Ursache.

Eine andere Möglichkeit sind HTTP-Teergruben. Diese lösen zwar auch nicht die Urspungsproblematik der Werbemails, doch helfen zumindest dabei, die Adressensammler der Spammer für einige Zeit in die Irre zu führen.

Die Technik ist ganz einfach. Es wird versucht, durch die andauernde Verlinkung auf die Urspungsseite den Webcrawler des Spammers ins Unendliche zu führen.

Ein Beispiel dafür währe spam.4-web.net.

Webserver-Konfiguration Top


Ich habe für die Teergrube eine Subdomain geopfert, es ist aber auch möglich, sie einfach in einen eigenen Ordner zu stecken.

Webserver-Konfiguration:


<VirtualHost *:80>
ServerName spam.4-web.net
ServerAlias mails.online-tutorials.net
DocumentRoot /path/to/public_html/spam
AliasMatch ^/[A-Za-z0-9]+\.[A-Za-z0-9]+$ /path/to/public_html/spam/index.php
CustomLog /var/log/apache2/spam.4-web.net-access_log combined
</VirtualHost>



Würde sich die index.php beispielsweise im Ordner /infinite befinden, müsste man dazu eine .htaccess-Datei im selbigen Verzeichnis erstellen mit folgenden Inhalt.

.htaccess:


<Directory /path/to/infinite>
AliasMatch ^/spamfight/[A-Za-z0-9]+\.[A-Za-z0-9]+$ /path/to/infinite/index.php
</Directory>



PHP-Script Top


Nun ist noch eine php-Datei mit dem Namen index.php erforderlich. Um die Last klein zu halten, verwendet dieses Script ein paar Funktionen, welche die Anzahl der gleichzeitigen Anfragen beschränkt. Dazu muss bei der PHP-Installation der Parameter --enable-sysvsem aktiviert sein sowie System V IPV im Kernel.

index.php:


<?
  define("LINKS_GENERATED",20); // Links pro Seite
  define("TIME_WAIT",1);        // Wartezeit [s] zwischen zwei Links
  define("MAX_CONCURRENT_USERS",20); // Obergrenze paralleler Aufrufe
  define("SEM_PERMS",0600);     // Rechte des Semaphors

  /* HTTP-Header ausgeben.
     Die Anfrage liefert immer OK, falls Einsatz über Error-Handler.
     Die Seite ist immer neu, um eventuelle Proxys zu umgehen.
     Content-Encoding wird wegen W3C-Konformität gesandt.
   */
  header("HTTP/1.1 200 OK");    // Für ErrorDocument-Variante
  header("Status: 200 OK");     // Für PHP3-Kompatibilität
  header("Expires: ".gmdate("D, d M Y H:i:s")." GMT");
  header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
  header("Cache-Control: no-store, no-cache, must-revalidate");
  header("Cache-Control: post-check=0, pre-check=0", false);
  header("Pragma: no-cache");
  header("Content-Encoding: iso-8859-1");

  /* HTML-Kopf ausgeben */
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
  <title>My very special links</title>
  <META name="ROBOTS" content="NOINDEX, NOFOLLOW">
</head>
<body>
<h1>Welcome to my very special links.</h1>
<?
  $sem_key = ftok (__FILE__,'T'); // Key für den Semaphor
  if ($sem_key != -1) {            // Key korrekt erzeugt
    $sem_id = sem_get($sem_key,MAX_CONCURRENT_USERS,SEM_PERMS);
    if ($sem_id !== FALSE) {      // Semaphor erzeugt oder gefunden
      if (sem_acquire($sem_id)) {
        /* Kritischer Abschnitt. P(s) war erfolgreich. */
        for ($i=0; $i<LINKS_GENERATED; $i++) {
          print "<a href=\"". md5(uniqid(rand(), true)).
                ".php\">".    md5(uniqid(rand(), true)).
                "</a><br><br>";
          sleep(TIME_WAIT);
        }

        /* Kritischen Abschnitt verlassen: V(s) */
        if (!sem_release($sem_id)) {
          /* Fehler bei V(s), Webmaster informieren */
          die ('Internal Error');
        }
      } // end if sem_acquire
    } // end if sem_id !== FALSE
  } // end if semkey != -1

  /* HTML-Footer */
?>
55 </body>
56 </html>



Ob sich der Umweg über das SysV-IPC rentiert, weiß ich noch nicht, da ich noch nicht die Zeit hatte, das Script anzupassen. Falls es bessere Lösungen gibt, bitte hier posten!

Suchmaschinen ausschließen Top


Damit nicht Suchmaschinen in Fallen tappen, die für die Spammer ausgelegt sind, nutzen wir die Datei robots.txt, welche von seriösen Webcrawlern befolgt wird.

robots.txt:


User-agent: *
Disallow: /



Befindet sich die Teergrube in einem Unterordner (hier: /infinite/), so ist eine Zeile anzupassen:

robots.txt:


User-agent: *
Disallow: /infinite/



Schlusswort Top


Diese einfache Methode kann schlecht programmierte Webcrawler bis zu Tagen an einer einzigen Seite fesseln, ohne vernünftige Ergebnisse zu liefern. Es gibt jedoch noch viele Verbesserungsmöglichkeiten, um die Webseite noch realistischer Wirken zu lassen. Auch eine Logging- und Statistik-Funktion wäre denkbar.

Quellen Top


Linux Magazin - Ernte, nein danke

Gibt es noch irgendwelche Fragen, oder wollen Sie über den Artikel diskutieren?

Editieren Versionen Linkpartnerschaft Top Printversion

Haben Sie einen Fehler gefunden? Dann klicken Sie doch auf Editieren, und beheben den Fehler, keine Angst, Sie können nichts zerstören, das Tutorial kann wiederhergestellt werden

Sprachenübersicht/Programmierung/PHP/HTTP-Teergruben