A robots.txt fájlt már több, mint 25 éve használjuk, de sokan még mindig nem úgy ahogy kell. A helytelen használattal pedig hatalmas biztonsági kockázatokat okozhatunk és hackerek számára nyithatjuk meg a kiskapukat. Ebben a posztban bemutatom, hogy mire való a robots.txt fájl, hogyan kell használni, végül pedig tanulságként bemutatom, hogyan törhettem volna fel egy weboldalt a hibás robots.txt segítségével. Ha penge vagy és már ismered a robots.txt fájlt és használatát, akkor ugorj nyugodtan a feltörős részhez 🙂
Mi a robots.txt fájl
A robots.txt fájl lényege, hogy a kereső és egyéb robotoknak eláruljon néhány dolgot az oldalad struktúrájával kapcsolatban. Ez egy nyilvánosan, bárki által hozzáférhető szöveges fájl a domained root könyvtárában.
Például: https://ad-ops.hu/robots.txt
Többek között ebben mondhatjuk meg a kereső robotoknak, hogy hol található az oldal sitemap-ja, milyen gyorsan engedjük a robotokat dolgozni az oldalunkon, melyik robotot engedjük vagy tiltjuk, de a leggyakrabban itt határozzuk meg, hogy mely oldalakat és könyvtárakat nem engedjük a robotoknak feltérképezni.
Mielőtt a kereső robotok ránéznének az oldalunkra, az első dolog, amit tesznek, hogy ránéznek a robots.txt fájlban található direktívákra, és az ebben foglaltak alapján dolgoznak tovább. A fájl használata nagyon egyszerű, jó szándékkal lett kitalálva, ugyanakkor helytelen használata magas biztonsági kockázatokat rejthet. Mielőtt ezekre rátérnénk lássuk hogyan is működik a robots.txt fájl.
Hogyan működik?
A Google részletes specifikáción keresztül mutatja be, hogyan kell jó robots.txt fájlt készíteni. Most a leggyakrabban használt parancsokat mutatom be egy-egy példán keresztül.
1. Teljes hozzáférés engedélyezése
User-agent: *
Ha ezt a sort tartalmazza a robots.txt fájl, akkor az összes robotnak zöld utat biztosítunk a teljes oldal feltérképezéséhez.
2. Minden robot tiltása
User-agent: * Disallow: /
A fenti két sor az összes robotnak, crawlernek megtiltja a teljes oldalunk feltérképezését.
3. Fájlok és könyvtárak tiltása
User-agent: * Disallow: /folder/ User-agent: * Disallow: /file.php
A Disallow parancs használatával egész könyvtárak, vagy csak bizonyos fájlok feltérképezését tilthatjuk meg. A rendszerfájlokat/könyvtárakat teljesen felesleges megmutatnunk a nagyvilágnak, ahogyan az admin felületünkhöz sincs senkinek köze. Ezeket mind itt tilthatjuk le.
4. Crawl-delay használata
Crawl-delay: 10
Ezzel a paranccsal megakadályozhatjuk, hogy a crawlerek túl gyakran érjék el az oldalunkat. Ha egy nagy site-ra rászabadul egy kereső robot, akkor az akár be is lassíthatja az oldal betöltődését a felhasználóknak. Ezért a nagy siteok előszeretettel használják a crawl-delay parancsot, amivel korlátozhatjuk a robotoknak a hozzáférését az oldalunkhoz. A fenti példa azt mondja a robotoknak, hogy 10 másodpercenként crawlolhatják az oldalunk.
5. Visit-time használata
Visit-time: 0200-0630
A visit-time paranccsal azt is megszabhatjuk, hogy az oldalunkat mely időben crawlolhatják a robotok. A fenti példa 02:00 és 06:30 (UTC) között engedi a feltérképezést.
6. Request rate használata
Request-rate: 1/10
A botok akár egymással párhuzamosan, több oldalunkat is crawlolják. A request-rate paranccsal ezt befolyásolhatjuk. Az 1/10 azt jelenti, hogy a crawlereknek 10 másodpercenként 1 oldalt engedünk megvizsgálni.
Most nézzünk meg egy konkrét példát:
User-agent: Googlebot
Disallow: #A Google botnak engedélyezzük a teljes site crawlolását User-agent: Yandex
Disallow: / #A Yandex kereső robotnak tiltjuk az egész oldalt
User-agent: *
Disallow: /admin/ #Az összes robotnak tiltjuk az admin könyvtár vizsgálatát
Disallow: /logs #Tiltunk minden logs-al kezdődő könyvtárt és fájlt
Sitemap: https://minta.hu/macilaci/ post-sitemap.xml
Sitemap: https://minta.hu/macilaci/ page-sitemap.xml #Itt található a sitemap a szerveren. Egyszerre akár többet is megadhatunk.
User-agent: *
Disallow: /*.gif$
Allow: /minta.gif$ #Az összes robotnak tiltjuk a .gif képek crawlolását, kivéve egyet
Mit ronthatunk el?
Disallow és Noindex keverése
Ha egy oldalt disallowra állítunk a robots.txt fájlban, attól az még simán megjelenhet a kereső találati listájában, főleg ha más oldalak is hivatkoznak rá! Bár a robotnak megmondtuk, hogy ne crawlolja, – nem is néz rá – viszont ha már korábban be volt indexelve, vagy hivatkozik rá oldal, akkor simán megtalálja és indexeli.
Ha tehát azt szeretnénk, hogy egy oldal meg se jelenjen a találati listában, akkor a Noindex robots meta taget kell használnunk az oldal head részében:
meta name="robots" content="noindex"
Ezzel egyidőben pedig figyeljünk arra, hogy ne szerepeljen az oldal disallowként a robots.txt fájlban.
Allow/Disallow hibák
Nagyon nagy gubancokat tudunk okozni, ha hibásan definiáljuk ezeket a parancsokat. Jól gondoljuk meg, hogy miket tiltunk ki, mert olyan tartalmat is tilthatunk, amit fontos lenne indexelni. Figyeljünk a kis és nagy betűkre, mert nem mindegy:
Disallow: /*.php #ez a parancs az összes .php-t tartalmazó fájlt és könyvtárat tiltja, ugyanakkor a minta.PHP fájl-t nem!
Disallow: /fish #az összes fish-el kezdődő könyvtárat és fájlt tiltjuk, viszont nem tartozik bele Fish.php fájl, mert nagy betűvel kezdődik!
Bizalmas könyvtárak
Sokan azt a hibát követik el, hogy a szerveren található bizalmas könyvtárakat (logok, jelszavak, adatbázisok, fájlok) is beteszik a robots.txt fájlba, hogy tiltsák ezeket a crawlerek elől. A hackereknek ez egy felhívás keringőre! Minden hacker a robots.txt fájlal kezdi a munkát, mert ebből látják, mik a tiltott könyvtárak, fájlok a szerveren. Az ilyen esetekre a jelszavas védelem, vagy IP korlátozás a megoldás, nem a robots.txt.
Könyvtárat tilts, ne fájlt
Ha a robots.txt fájlban csak egy konkrét fájl van disallow-ra állítva, az mindig felkelti az illetéktelenek figyelmét! Tudni fogják, hogy pontosan mi a célpontjuk. Állítsunk tehát inkább egész könyvtárakat disallow-ra, hogy legalább dolgozniuk kelljen kicsit.
Index oldal hiánya
Minden könyvtárba tegyünk egy index fájlt, hogy ezzel elkerüljük a könyvtár listázást. Ha egy könyvtár ugyanis nem tartalmaz ilyet, akkor a böngészők kilistázzák a könyvtár teljes tartalmát egy fa struktúrába. Ezt senki se szeretné!
Ne linkelj privát tartalomra
Ha akár egy link is privát tartalomra mutat, akkor a kereső robotok bejutnak a könyvtárba! Sose linkelj privát könyvtárra.
Teszteld a robots.txt fájlt
A neten rengeteg tool van amivel a robots.txt fájlt tudjuk tesztelni, de a legtutibb módja ennek, ha a Google Robots.txt Tester eszközét használjuk.
(robots.txt tesztelő)
Egyszerűen csak írjuk át a betöltött robots.txt fájl tartalmát, majd nyomjunk a küldés gombra. Alatta pedig konkrét url-eket ellenőrizhetünk, hogy látja-e a robot vagy sem.
Így törik fel az oldalad
Ahogy korábban írtam a robots.txt fájl egy egyszerű szöveges fájl, ami a crawlereknek nyújt segítséget az oldal feltérképezéséhez. Ebben a fájlban adhatjuk meg azokat a fájlokat, könyvtárakat, amiket nem szeretnénk, ha a robotok feltérképeznének. Ilyenek lehetnek főként az oldalunk admin felülete, a log könyvtárak, vagy egyéb rendszer könyvtárak. Mivel ez egy nyilvános, bárki számára elérhető fájl a szerverünkön, ezért a hackerek előszeretettel kezdik az oldal feltörését ennek a fájlnak a vizsgálatával. Ugyanis általában benne van az admin felület elérhetősége, rosszabb esetben pedig olyan fájlok és könyvtárak is, amiknek semmi keresnivalójuk nem lenne ott.
Most egy konkrét, valós példán keresztül mutatom be, hogy a robots.txt hibás használatával milyen nagy biztonsági problémákat okozhatunk.
Itt egy IT cég, most is élő weboldalának a robots.txt fájlját látod:
(a fájl még mindig elérhető)
A weboldal URL címét szándékosan takartam ki, mert a hiba a mai napig megtalálható az oldalon. Mit is látunk a képen? A jó képességű fejlesztő olyan bizalmas könyvtárakat tett disallow listára, mint a backend, databases vagy resume könyvtárak. Talán úgy gondolta, hogy ezeket nagyon nem szeretné ha a robotok feltérképeznék, ezért biztos ami biztos, még ki is emelte ezeket a robots.txt fájlban. Ha ezek nem lettek volna megemlítve a robots.txt fájlban, nem is tudnánk a létezésükről, de így nem is kell több, nézzünk gyorsan beléjük 🙂
A databases könyvtárban ezt találtam:
(a teljes adatbázis publikus könyvtárba mentve)
Igen jól látod! A bekeretezett fájl a weboldal teljes adatbázis mentése!
Ebből hamar kiderül az oldal adatbázis struktúrája, látszik, hogy a felhasználók állásokra jelentkezhetnek. Az egyik tábla például tartalmazza az összes jelentkező személyes adatát:
(szemlyes adatok tömkelege)
Kicsit lejjebb görgetve pedig megtaláljuk az admin hozzáférési adatait is:
(az admin hozzáférés)
Az is látható, hogy a feltöltött önéletrajzokat a /resume/ könyvtárba tölti fel a rendszer. Belépve ebbe a könyvtárba ezt találtam:
(publikus könyvtárban az összes jelentkező önéletrajza!)
Ahogy a fenti példán látszik, a fejlesztő nagyon sok súlyos hibát vétett az oldalon, de a legrosszabb, hogy ezekre még fel is hívta a figyelmet a robots.txt fájlban. Amit tennie kellett volna, hogy ezeket a könyvtárakat nem teszi be a robots.txt-be, hanem jelszóval levédi őket. A másik pedig, hogy az adatbázis biztonsági mentését nem tároljuk ugyanazon a szerveren! Ezen kívül sok más probléma is volt az oldalon, például az admin bejelentkező felülete, de ez a poszt most nem erről szól.
+1 tipp, így állíts csapdát
Olvastam egy jó módszert arra, hogy mit tegyünk a robots.txt fájlt kutató hackerek ellen. A módszer lényege, hogy helyezzünk el csalit a robots.txt fájlban. Tegyünk bele például egy kimondottan figyelem felhívó sort:
Disallow: /secure/logins.php
Nincs olyan hacker, aki ne lenne kíváncsi ennek a tartalmára 🙂
A csapda az, hogy ha valaki megnyitja ezt a fájlt, akkor az IP címét automatikusan fekete listára tesszük és kitiltjuk az egész oldalról. Jó móka!