registrieren registriertes Mitglied


Anzeige

Anzeige

HowTo: Wie man unliebsame (Bad) Bots und Content Scraper los wird/blockiert

Hier könnt Ihr Eure Fragen zu Google-Shopping, GOOGLE-Maps, Bilder- bzw. Video-Suche und sonstigen Suchmaschinen außer Google stellen.
supervisior
PostRank 9
PostRank 9
Beiträge: 2093
Registriert: 26.06.2006, 09:11

Beitrag supervisior » 16.09.2020, 11:32 HowTo: Wie man unliebsame (Bad) Bots und Content Scraper los wird/blockiert

Wer sich schon mal näher mit dem Thema Bad Bots oder aber mit den Kollegen beschäftigt hat, die einem den Content von der Seite klauen und sich dafür frei zugängliche Scripte, aber auch Plugins zunutze machen, wird darüber eine Unmenge an Suchergebnissen finden. Keine ist so wirklich 100%ig sicher, zumal wenn man auf irgendwelche Listen zugreift, weiß man nie, wie alt diese Listen sind und wie diese zustande kamen. Zumal hinzukommt, dass damit eher zu viel blockt als zu wenig und man vielleicht den falschen damit trifft, wenn man den UA oder/und die IP Adresse verwendet.

Ich möchte nun nachfolgend eine Methode vorstellen, die zwar nicht den Anspruch erhebt wirklich 100% sicher zu sein, aber man hat es in jedem Fall selbst in der Hand eine Blockierung zu steuern. Wichtig ist dabei auch, dass man sich das durchwühlen in der access_log ersparen damit ersparen kann.

Diese Methode basiert im Grunde genommen auf dem, was jeden Bot ungeachtet seiner Intention und sonstige Scraper auszeichnet. Sie alle lieben Links, je mehr umso besser und genau darin liegt deren Schwäche, die man gezielt ausnutzen kann.

Was man dazu braucht, ist nichts anderes als ein Link auf eine custom PHP Seite, also nicht irgendeine Content Seite, die man mit seinem CMS erstellt, sondern eine davon losgelöste PHP Seite. Der Link ist ein ganz normaler Link, allerdings mit CSS auf display:none gesetzt und einem rel=nofollow Attribut. Auf letzteres könnte man auch verzichten, wenn man die Möglichkeit hat den gesetzten Link für all jene zu blacklisten denen man den Link nicht zeigen will, wozu aber es PHP oder alternativ Smarty bräuchte. Dieser besagte Link sollte nach Möglichkeit omnipräsent auf jeder Seite vorhanden sein, was ihn besonders attraktiv macht. Auf welche Seite dieser Link verweist, ist eigentlich egal, muss aber auf die besagte PHP Seite verweisen.

Durch das visuelle Ausblenden dieses Links wird dieser Link nur all jenen zugänglich, bzw. sichtbar, die eine Seite nicht rendern, sodass der normal sterbliche Besucher von diesem Link schon mal gar nichts mitbekommt, aber alle anderen förmlich anzieht, wie das Licht die Motte.

Beim Aufruf dieser besagten PHP Seite bekommt der aufrufende nichts zu sehen, weil leer, zumindest braucht es keinen Content, geschweige denn HTML Code. Was es aber braucht, ist eine PHP Funktion, die nichts anderes macht als die Zeit des Aufrufs, die IP Adresse und den User Agent in eine Text Datei zu schreiben. Wer es gerne Hardcore habe will, so wie ich :), der lässt die IP Adresse gleich in die .htaccess schreiben, aber das ist jedem selbst überlassen. Wir schreiben es zunächst mal nur in eine Text (.txt) Datei auf dem Server.

Legt dazu ein Verzeichnis mit beliebigem Namen im Document Root der jeweiligen Domain an. Optional könnt ihr dieses Verzeichnis auch mit einem Verzeichnisschutz belegen order alternativ den Aufruf von .txt Dateien für dieses Verzeichnis in einem .htaccess Eintrag sperren. (siehe unten)

Code: Alles auswählen

<?php
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$userAddress = $_SERVER['REMOTE_ADDR'];
$userRequestTime = $_SERVER['REQUEST_TIME'];
$userReferer = $_SERVER['HTTP_REFERER'];
$userRequestUri = $_SERVER['REQUEST_URI'];


if (!file_exists('export/bots.txt')) {
   $fp = fopen('export/bots.txt', 'w');
   fwrite($fp, '#IP' . "\t" . 'Zeit' . "\t" . 'Referrer' . "\t" . 'Aufgerufene URL' . "\t" . 'Browser' . "\n");
} else {
   $fp = fopen('export/bots.txt', 'a');
}
fwrite($fp, $userAddress . "\t" . date('d-m-Y H:i:s', $userRequestTime ) . "\t" . $userReferer . "\t" . $userRequestUri . "\t" . $userAgent . "\n");
    fclose($fp);
Wer den Zugriff von außen über einen Verzeichnisschutz nicht beschränken kann, der kann sich alternativ mit dem folgenden Eintrag in der .htaccess bedienen. Muss dafür aber eine neue .htaccess anlegen und diese dann in dem Verzeichnis ablegen in der man die Text Datei speichern lässt.

Code: Alles auswählen

<FilesMatch "(?<!\.txt)$">
  <IfModule mod_authz_core.c>
    # Apache 2.4
    <RequireAll>
      Require all denied
    </RequireAll>
  </IfModule>
  <IfModule !mod_authz_core.c>
    # Apache 2.2
    Order Deny,Allow
    Deny from all
  </IfModule>
</FilesMatch>
Das wars dann auch schon. Mehr ist dafür nicht zu tun als gelegentlich mal in diese bots.txt nachschauen und dann bedarfsweise den UA oder/und IP Adresse in der Root .haccess zum Blocken definieren. Bei zweifelhaften IPs bei denen der UA nicht zweifelsfrei die Identität hervorbringt oder der UA gänzlich fehlen sollte, die IPs nicht dauerhaft sperren, sondern so dann und wann alle Einträge wieder löschen.

Auf Seite 3 gibts ein Update dazu
Zuletzt geändert von supervisior am 17.09.2020, 19:34, insgesamt 2-mal geändert.

Anzeige von: