Bad robotok, lopjatok máshol

Mostanában nagyon ráálttam a weboldalak biztonságának erősítésére, aminek eredeti oka a katalógusom meghackelése volt. Majd megszakadt a szívem úgy látni azt a remek oldalt:)

None kívánsága szerint egy automata bad robot defender szkriptet fogok most itt prezentálni. Az összeállításához a metodikát innen szereztem. Ez az oldal részletesen bemutatja a bad robotok azon rossz tulajdonságát, hogy nem hallgatbak a jó szóra és a robots.txt-ben korlátozottként specifikált tartalmat is látni akarják a hackerekhez hasonlóan.

Pár poszttal korábban megismertettem egy módszert, amivel a robots.txt fájl-t az illetéktelenek elől elrejthetjük. Sajnos ezt most majd ki kell szerelni az oldalból, de azt gondolom megéri.

Hát akkor kezdem a védelem ismertetését.
1. Nyisd meg a robots.txt fájl-t és helyezd bele ezt a két sort

User-agent: *
Disallow: /core

A mappa neve bármi lehet, a lényeg az, hogy a rosszindulatú humanoidok is rákapjanak a nevére, mert amint megteszik vége a dalnak.

2. Hozd létre a robots.txt.-ben definiált mappát, és a könyvtárba másold fel az alábbi tartalmú index.php fájlt.

<?php
//gyujtsük össze az IP-t, vagy bármi mást, amit szeretnénk
$ip = $_SERVER[“REMOTE_ADDR”];
$logfile = ‘bannolnilog.txt’;
//logfájlba vele
$fp = fopen($logfile, ‘a’);
fputs($fp, “$ip
“);
fputs($fp, ” “);
fclose($fp);
// kézfogás közben ne felejtsünk el mosolyogni
echo “az IP biztonsági okokból rögzítésre került, sajnos a látogatásod itt véget ért”;
?>

3. A létrehozott mappába (példánál maradva core) másoljuk fel az imént logfile-ként definiált üres bannolnilog.txt-t (644-es attributúmmal működik nálam). Ő fogja majd gyűjteni a bűnösök neveit.

4. A györkérmappába, de oda tesszük, ahová csak szeretnénk töltsük fel az alábbi tartalmű validator.php fájlt.

<?php
$ip = $_SERVER[“REMOTE_ADDR”];
//fontos a target megfelelő elérése, a hibaüzenetek majd tudtunkra adják, ha elrontottunk valamit
$target = file(dirname(__FILE__). “/core/bannolnilog.txt”);
foreach($target as $item){
$item = trim($item);
if(stristr($ip, $item)){
//sima 403 hiba a válasz, de ha gondolod, mond meg nekik a magadét
header(“HTTP/1.0 403 Forbidden”);
exit;
}
}
?>

5. Nyisd meg a header.php fájlt, vagy bármi, ami elkezdi a szkriptet futtatni, és minden elé illeszd be

<?php require “/ide/jön/a/path/validator.php”;?>

6. A védelem felállt, ha véletlenül magadat sikerült kibannolod, ürítsd ki a logfájlt ftpvel és meg is vagy.

További kellemes napot!

26 thoughts on “Bad robotok, lopjatok máshol

  1. none

    Ez szintén nagyon szuper lett! Ahogy gondoltam is! 🙂 Ismét köszönet érte! Viszont sehogy nem lehet ez úgy megcsinálni, hogy a robots.txt is rejtve maradjon? Minden esetre hamarosan kipróbálom.

    Köszönet!!!

  2. none

    Na felmerült bennem ismét egy lehet, hogy láma kérdés. Nagy baj, lenne, ha csak a google, msn, és yahoo botokat engedném az oldalra? Miért kell nekem a többi robot látogatása? Szükségem van nekem rájuk? Mert arra gondoltam, hogy a robots.txt védelmet is benne lehetne hagyni, amiben letiltom a google, msn és yahoo robotnak, hogy látogassák a core mappát. Ők mivek “okos” robotok 🙂 ezért sosem mennének be. Minden más egyéb robot, pedig ki lenne tiltva az oldalról. Ez nagy gond lenne? Miért van szükségem nekem a többi robotra?

  3. Bagi Zoltán Post author

    Sajnos Akhilleuszt is csak a sarkán lehetet megsebezni, így jelen esetben nem tudok más módszert. Ez biztos módszer az identifikálásukra.

  4. Bagi Zoltán Post author

    Az a probléma a második kérdéssel, hogy ahhoz, hogy valamit kitilts először azonosítanod kell. Robotokat legegyszerűbben user-agenttel lehet talán tiltani. Ha elkészül egy függvény, amely minden google, yahoo msn user agentjétől különböző látogatót tilt, akkor a humanoid látogatók majd vakarhatják a fejüket, mert őket is letiltottad.

    Ennél a szkriptnél azért is vannak több fájlban a dolgok, hogy minimálisan terhelje csak az oldalt, hiszen csak a tutira gázos IP-ket fogja elutasítani.

  5. none

    Oké, köszi a választ! Megcsináltam mindent, de sajnos az alábbi hibaüzit kapom:

    Parse error: syntax error, unexpected T_STRING in /web/xxx/xycz/templates/templatenev/index.php on line 38

    Ez Joomlán van, és a templatem index.php file-ban reklamál valamit ahová beszúrtam ezt, csak természetesen átírva:

    Próbáltam több helyre is beszúrni, az index.php fileba, de mindíg ez a hibaüzim.

    Ha jól értem a core mappában akkor a TXT-file-nak és az index.php filenak kell lennie. Valamint a gyökérbe tettem. A TXT file-nak adtam 777-es attributúmmot is, de úgy sem akarta az igazságot. De feltételezem nem ez lesz a baj.

    Esetleg van valami ötleted?
    Köszi!

  6. Bagi Zoltán Post author

    Teljesen jól értetted, a core mappába megy az inde.php és a logfile, a telepítési helyre megy a validator.php és annak meghívása a template fájl első sorába. Szerintem ezzel a template fájllal zavartam be, mert én másik típusú szkriptbe szereltem be eddig, nem joomla volt és a header.php első sorába kellett tennem.

    Ha te joomlával mész, akkor ne a template fájl index.php-jébe szereld a validator meghívását, hanem a telepítési mappa index.php legelső sorába, rögtön a copyright megjegyzések elé. Így már muszály lesz működnie, mert működő joomlán ilyen módon hívom a reversedns.php-t minden hibaüzenet nélkül.

  7. none

    Most kipróbáltam. Itt a Joomla telepítése után nincsen telepítési mappa, mert azt törölni kell a telepítés után. Ez kötelező, mert a mappa törlése nélkül el sem indul a Joomla. De gondolom ezt te is tudod. Szerintem amire gondoltál, az a Joomla alap index.php file-ja ami a gyökérben van.

    Oda is beszúrtam a kódot, de így sem akart menni a dolog. Ugyan az a hibaüzi.

    Viszont láttam a kódodban olyat, hogy “fopen”.
    A weblap tárhelyén ez van:
    allow_url_fopen: Off
    Lehet, hogy ez a baj? Vagy ez marhaság?

  8. Bagi Zoltán Post author

    None, megint nem fejeztem ki magam elég értelmesen. Installálási mappa alatt arra a mappára gondoltam, ahova a joomlát telepítetted. Jelen esetünkben az a mappa, ahol az index.php, az index2.php offline.php fájlok is megtalálhatóak. Az ebben lévő index.php fájlba kellene betenni.

    Szerintem ha fopen valóban le lenne tilva a joomlát nem nagyon tudtad volna felrakni, mert ha jól emlékszem az installation mappába lévő telepítő fájlok egy részét ezzel nyitja meg. Virtuemartos joomlához volt szerencsém.

  9. none

    Semmi gond. Nem kötekedni akartam. A lényeg, hogy jó helyre tettem és megértettem hová kell rakni. Viszont a fopen ezen a tárhelyemen valóban OFF!

    Ezzel szemben megnéztem egy másik Joomlás tárhelyemet és ott ON-ra van állítva. Sajnos én nem tudom konfigurálni a PHP beállításokat. Fizetős tárhely. De elképzelhető, hogy ez a baj?

    Köszi!!

  10. Bagi Zoltán Post author

    Jó hírem van, a directorym phpinfójában szintén off az allow url fopen érték és mégis hiba nélkül megy a szkript, gondolom azért mert nem url-t nyitunk vele.

  11. none

    🙂 Hát sajna nekem ez nem jó hír. 🙂 Most már tényleg nem tudom, hol kell keresem a hibát.

  12. none

    Hasonlót mint az első bejegyzésemnél.

    Parse error: syntax error, unexpected T_STRING in /web/turbopower/turbopower.hu/index.php on line 1

    Sajnos nem tudom mit jelent ez a hiba. 🙁

  13. Bagi Zoltán Post author

    Bocsánat, sajnos gyorsan felejtek, ez az átka a párhuzamosan végzett tevékenységekkel. Értem már a helyzetet. Szerintem a word press lesz a bűnös. Elkódolja a blockuote-ba tett ” (idézőjelet). Kérlek, ellenőrizd, hogy a
    <?php require “/ide/jön/a/path/validator.php”;?>
    meghívóban helyesen szerepelnek-e az idézőjelek, valamint, hogy a <?php után van-e szóköz. Most vettem észre, hogy ez kimaradt a posztban, mármint a szóköz, mindjárt beszúrom.

  14. none

    Igen az idézőjel valóban hiba volt. Ezt én is észrevehettem volna. Miután javítottam egyből megváltozott az egész sornak a színe a PHP editorban. Viszont a probléma továbbra is fenntáll.

    Két féle képpen próbáltam.

    Próbáltam megadni így a path elérési útvonalat. (Ezt a Joomla adminban mutatja!)

    /web/turbopower/turbopower.hu/validator.php

    Ekkor ezt a hibaüzit kaptam:
    Parse error: syntax error, unexpected T_LNUMBER in /web/turbopower/turbopower.hu/validator.php on line 9

    Aztán próbáltam így is megadni a path-ot.
    /validator.php
    azaz sehogy.

    Ekkor ezt a hibaüzit kapom:
    Warning: require() [function.require]: open_basedir restriction in effect. File(/validator.php) is not within the allowed path(s): (/web/) in /web/turbopower/turbopower.hu/index.php on line 1

    Warning: require(/validator.php) [function.require]: failed to open stream: Operation not permitted in /web/turbopower/turbopower.hu/index.php on line 1

    Fatal error: require() [function.require]: Failed opening required ‘/validator.php’ (include_path=’.:/usr/local/php5/lib/php’) in /web/turbopower/turbopower.hu/index.php on line 1

  15. Bagi Zoltán Post author

    Az első megoldás pedig jó lesz, ha egyszer készen lesz. Át tudnád dobni nekem [bagiz(kackackukac)i-connector.com ] a validator.php-det úgy ahogy most van.

  16. none

    Oké, köszönöm szépen, hogy segítettél. Én voltam a ludas. A validator.php-ban nem javítottam ki az idézőjeleket, de utánna az elkészült index.php fileba is benéztem, és ott is volt mit javítani. Nem csak az idézőjelek voltak elszúrva, hanem ami csak 1 db vonást csinál, nem kettőt. Az is csálén volt. De most megcsináltam az átalakításokat, és hiba nélkül betöltődött az oldal. Elvileg akkor úgy tudom tesztelni, hogy megnyitom a core mappát, és elvileg kibannoltatom magam. Utánna pedig törlöm a logból az IP-m, és már kész is vagyok. Jól sejtem?

    Még egyszer köszi Zoli, és bocs, hogy fárasztottalak!!

    Imre

  17. Bagi Zoltán Post author

    Örülök, hogy sikerrel zárult a dolog, majd megpróbálom a wordpresst kicsit kiokítani az elkódolásról.

    Pontosan, belenézel a core mappába, és véged (fehér oldal, bármely URL-t kéred le). Ha tiszta előéletet szeretnél, akkor csak kirölöd az IP és megváltottad magad. Szegény Isaurának sokkal nehezebb volt.

  18. none

    “Szegény Isaurának sokkal nehezebb volt.” 😀 Ez marhára tetszett! 🙂

    Oki, ki is próbáltam! Kaptam egy BAN-t! 😀
    Nagyon pöpec! Ismét csak fejet hajtani tudok előtted!

    Köszönöm szépen még egyszer!

    Ha gondolod, töröld ezeket a kommenteket.

    Üdv: Imre

  19. Bagi Zoltán Post author

    Imre, hajolgatni nem érdemes, mert megfájdul a derekad, örülök, hogy hasznos lett a cuccos:)

    A kommenteket hagyom, valiknek lehet, egyszer segíteni fog, nameg mocskos jól néz ki ez a sok komment a bejegyzés címe mellett.

    Jó éjt!

  20. Kefe

    Tényleg szuperül működik a script, kipróbáltam és simán kibannoltam magam a turbopower.hu oldalról… Tényleg jó.

    Zoli, egy kérdés: estek-e és hányan eddig a kelepcébe?

  21. Bagi Zoltán Post author

    Kefe, az a helyzet, hogy most beszereltem az oldalamba egy frankó php statisztika scriptet, ami elég jól logol. Robot még nem esett bele, de hackert fogtam már vele. Nem konkrétan ezzel a szkripttel, mert az már az sql injekció gyanús sztringek lekérésének szűrését is tartalmazza.

    Ez a bad robot trap szkriptet egy hosszabb út első állomásának tekintem, előbb utóbb mysql-t kellene mögé rakni és lekérdezési mintázatokat bannolni, szóval most az adatgyűjtés korszaka következik.

  22. none

    Eddig “sajnos” csak Kefe lett kibannolva az oldalamról, bár talán ez nem is annyira aggasztó. 🙂

    Viszont Zoli ez azt jelenti, hogy egy összetettebb védelmi rendszeren dolgozol?

Comments are closed.