Robots.txt használata és veszélyei: Így törik fel az oldalad!

Csentes Zoltán    2019-02-05

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.

Google robots.txt tesztelő

(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:

Egy biztonsági hibás robots.txt fájl

(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:

Teljes adatbázis lementve publikus könyvtárba.

(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:

Adatbázis mentésben az összes jelentkező személyes adata

(szemlyes adatok tömkelege)

Kicsit lejjebb görgetve pedig megtaláljuk az admin hozzáférési adatait is:

Adatbázis mentésben az admin jelszava

(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:

Az összes feltöltött önéletrajz publikus könyvtárban

(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! 🙂


Megosztani ér:


Mennyire volt hasznos számodra a cikk?

Értékelések száma: 6
Átlagos értékelés : 4.7

Kíváncsi vagyok a véleményedre is: