Wir bauen eine Falle für Bots in PHP

Keine Frage, es gibt gute Bots, die nützlich und erwünscht sind auf Webseiten. Daneben gibt es aber auch diejenigen, deren Zweck bösartiger oder zumindest unwillkommener Natur ist. Ein Indiz um "böse" Bots zu erkennen ist, wenn diese sich nicht an die Robots.txt halten wollen. Mit dieser Anleitung erstellen wir ein kleinen Honeypot in PHP, welcher Zugriffe von Bots in ein Logfile schreibt. Diese können dann gesichtet und ggf. mittels .htaccess-Datei blockiert werden.

Warum einige Bots nicht auf den Webserver gelassen werden sollten

Eine kleine, nicht abschliessende Liste, welche bösartigen Funktionen unerwünschte Bots haben können:

  • Abmahnfähige Seiten finden, Bspl. Seiten ohne oder unvollständiges Impressum, Urheberrechtsverstösse etc.
  • Sammeln von Email-Adressen, Adressdaten, Telefonnr, Kontaktformulare für Spam
  • Finden von Sicherheitslücken, veraltete Wordpressversionen und ähnliches.
  • "Diebstahl" von Content
  • uvm.

Aber auch Bots, welche keine bösartigen Absichten verfolgen, will man nicht unbedingt auf dem Server rumturnen lassen. Bei datenbanklastigen Webauftritten, kann ein Bot, welcher sich mit voller Geschwindigkeit durch die Sites hangelt ordentlich Ressourcen für sich beanspruchen. Mit ein Grund, warum die Robots.txt überhaupt erfunden wurde.

Honeypot erstellen

Das PHP-Skript:

Erstelle eine Datei namens honeypot.php im Wurzelverzeichnis deine Website mit folgendem Inhalt:

<?php                                              
$Content = 'Datum: '.date('d.m.Y, H:i:s')."\r\n".
'IP-Adresse: '.$_SERVER['REMOTE_ADDR']."\r\n".
'Host: '.$_SERVER['REMOTE_HOST']."\r\n".
'User-Agent: '.$_SERVER['HTTP_USER_AGENT']."\r\n";

$handle = fopen ("bad-bots.txt", a);
fwrite ($handle, $Content."\r\n");
fclose ($handle);
?>

Robots.txt bearbeiten

Verbiete den Zugriff auf honeypot.php via robots.txt für alle Bots.

Zum Beispiel so:

User-agent: *
Allow: *
**Disallow: /honeypot.php**

Falle stellen

Dann musst Du noch dafür sorgen, dass die Bots auch in die Falle tappen können. Erstelle daher einen leeren Link, irgendwo auf deiner Startseite:

 <a href="https://deine-website.ch/honeypot.php" rel="nofollow"></a>

Zugriff auf Logfile unterbinden

Um den Zugriff via http(s) auf dein Logfile zu verhindern, füge folgendes deiner .htaccess-Datei im Wurzelverzeichnis Deiner Website hinzu:

<Files bad-bots.txt>
 Order deny,allow
 Deny from all
</Files>

Damit ist dein Logfile nur noch via FTP(s) oder SSH lesbar.

Geduldig sein

Jetzt heisst es zuersteimal warten, bis ein Bot in die Falle tappt. Wenn das geschehen ist, kannst Du mittels "whois" in der Linuxshell oder alternativ in im Web weitere Daten zur geloggten IP-Adresse abfragen. Abschliessend kann die IP dann via .htaccess gesperrt werden:

Order Deny,Allow
Deny from 333.333.333.333
Deny from 123.456.789.000
...

Fertig!

Viel Spass beim Bot fangen!

Roboter Bild: Autor: Emma Marie Andersson| Quelle: Wikmedia Commons| Lizenz: CC BY-SA 2.0

Erstellt am: 13.2.2019 zuletzt editiert: 17.2.2019