Crawler und Bots (IP-Bereiche) sperren
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
agent
aktuelle liste
array
befehl
bereich
blocken
bot
code
funktionieren
genauen name
machen
ordern
pfanne
sammlung
sperren
string
teil
testen
verwenden
webseite
-
Hallo
ich habe eine HOmepage, die wird von (unerwünschten) Bots überrannt,
zum Teil aus DE, USA, China, Japan, etc. ... die kommen 100 mal täglich und öfter
ich möche von meiner Webseite also bestimmte Crwaler / Bots aussperren
manche kommen immer mit ähnlicher IP-Adresse, da könnte ich doch deren IP-Block sperren ?
... wie macht man das ... EDIT: in der robots.txt
deny from 144.76.22
oder
deny from 144.76.22.0/8
habe das mit dem .0/8 in einem BSP gesehen, aber was macht das,
nur von 144.76.22.0 bis 144.76.22.8 .... ??
aber andere kommen mit sehr unterschiedlichen IPs, kann ich diese dann über user-agent sperren ?
user-agent: trendictionbot
disallow: /
user-agent: AhrefsBot
disallow: /
wie muss der "String" nach user-agent: "Befehl" im HTTP_USER_AGENT] vorkommen ?
... genau oder irgendwie als Teilstring ?
Bsp:
[HTTP_USER_AGENT] => Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)
würde das dann schon funktionieren (nur mit Teil-String)
user-agent: Yandex disallow: /
oder muss ich den "genauen" Name des Bots kennen ?
---> gibt es eine (aktuelle) Liste mit "bösen" Bots, die man aus-sperren sollte
also eine Sammlung der IPs oder User-Agents von unerwünschten crwalern ?
Beitrag zuletzt geändert: 29.8.2013 11:35:16 von btausch -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
nicht in der robots.txt machen,
die wird (vorallem von bösen Bots) oft ignoriert
in der .htaccess
Order deny,allow Deny from 5.10.83.0/24 Deny from 144.76.22.0/24 Deny from 141.8.147.20
oder in PHP, bevor irgend etwas ausgegeben wird
die Variable $_SERVER['REMOTE_ADDR'] auf unerwünschte IP-Teile prüfen
$block_ips = array( '5.10.83', '144.76.22', '141.8.147.20', ); $userip = $_SERVER['REMOTE_ADDR']; foreach($block_ips as $bip) { if ( strpos($userip, $bip) !== false ) { print "<p>blocked</p>; exit; }
anstatt strpos() kann man evtl. auch ein preg_match oder anderes Verwenden,
um zu Prüfen, ob die User-IP einen der zu blockenden IP-Bereich entält.
strpos() ist etwas buggy ... weil auch 188.5.10.83 "geblockt" wäre
obwohl man ja "nur" 5.10.83.0 bis 5.10.83.255 blocken will ...
also müsste man auch testen, ob die User-IP mit dem geblockten Bereich beginnt,
nicht nur, ob der Bereich "enthalten" ist ... also wohl besser preg_match()
aber den passenden pattern dafür hab ich jetzt grad auch nicht auf der Pfanne
:)=
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage