ugrás a tartalomhoz

PHP Logolás

alkony4 · 2015. Okt. 28. (Sze), 21.05
Szíves elnézését kérem a fórumnak, ha nem megfelelően hoznám létre a témát. Nem nagyon szokásom fórumozni, inkább csak aktív olvasója vagyok azoknak, viszont most egy érdekes problémába ütköztem. Egy ip logolást csinálok épp, a beérkező lekérdezéseket az oldalon menti (ip, useragent, referer, stb) illetve, hogy melyik oldal volt lekérdezve, amit az alábbi módon állítok elő: "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'].
Ennek ellenére, befutott egy olyan (valószínűleg) bot által logolás ami az alábbi címet tartalmazta: http://www.cloud.ph/... Természetesen, ilyen oldalt nem nézhetett mert az oldal nem az én tulajdonomba van... képzelhetitek mennyire meglepődtem.
A leglogikusabb magyarázat, hogy valamiképp a $_SERVER['SERVER_NAME'] értéket változtatta meg. Merül fel a kérdés, ez hogy lehetséges? Szeretnék hatékonyan védekezni ellene.
Még egy olyan záradékot is tettem bele a kódomba miszerint ha $_SERVER['SERVER_NAME'] nem egyezik a $_SERVER['HTTP_HOST'] -al akkor ne is szolgálja ki... ennek ellenére még is.
Szeretném kérni a tanácsotok ez ügyben.
Válaszaitokat előre is köszönöm.
(Google, megvolt de hiányos angol ismereteim végett neeem túl sokra jutottam).
Köszönöm
 
1

Default

vbence · 2015. Okt. 28. (Sze), 21.12
Ha a default virtual hosztod (az első a sorban, ami bejön, ha csak szimplán beírod a szserver IP-jét) megegyezik azzal, amin a logger van, akkor érthető. A default hoszt jön be, ha olyan virtualhosztot szólítanának meg, amihez nincs név alapján vhoszt rendelve.
2

Félreértés

alkony4 · 2015. Okt. 28. (Sze), 21.21
Bocsáss meg, lehet én nem értem amit írsz és rossz a reflexiom a válaszodra de az alapvető gond, ott kezdődik, hogy olyan server_name-el tér vissza aminek semmi köze az én szerveremhez, nem ráirányított domain etc.
vhostnak is a base-el kéne visszatérnie, ami az enyém volna az xy.zz domain viszont itt egy teljesen különálló server_name visszatérési értékről van szó ami köszönőviszonyba sincs a serverrel.
Elnézést ha félreértem a válaszod és egyben köszönöm is.
3

UseCaninicalName

vbence · 2015. Okt. 28. (Sze), 23.15
Az Apache (az általános gyakorlat szerint) a virtualhosztokat a nevük alapján különbözteti meg. Ezt a nevet onnan tudja, hogy a böngésző (vagy bot) a TCP kapcsolat felépülése után (ami két IP között történik) explicite közli, hogy én most az xy.com-ot szeretném megszólítani.

Bárki megteheti (akárt te is putty segítségével), hogy megynitja, a 80-as portot és átküli a következő szöveget:
GET /valami HTTP/1.1
Host: tenyleg-barmi.com

Az utoltsó egy üres sor.

Ekkor a webszervered megkeresi a névhez tartozó virtualhosztot (mivel nem lesz ilyen, a defaultot fogja kiválasztani) és futtatja a PHP kódodat.

A SERVER_NAME értéke attól függ, hogy a UseCanonicalName direktíva mire van állítva. A dokumentációból:

With UseCanonicalName Off Apache httpd will form self-referential URLs using the hostname and port supplied by the client


...vagyis amit akliens mond az lesz a SERVER_NAME.
4

Fény az alagút végén

alkony4 · 2015. Okt. 28. (Sze), 23.33
Nagyon szépen köszönöm a válaszod! Közel s távol ez a legértelmesebb válasz amit várhattam :D Azt nem mondom, hogy teljes mértékben értem, is... az apache beállításaiban nem vagyok olyan jártas éééés jócskán betesz sajna az idegen nyelv (amit akarok megértek általában).
Viszont ha jól értem, ha a UseCanonicalName direktívát bekapcsolom akkor ez a probléma hárul? Maga a UseCanonicalName szerepe az ami ne teljesen világos. (Elnézést hogy itt feltartom a társaságot az alap kérdéseimmel ><)

Nagyon szépen köszönöm válaszod.
5

Igazán nincs mit

vbence · 2015. Okt. 28. (Sze), 23.54
Ha a UseCanonicalName-et On-ra állítod (az adott virtualhosztban), akkor a SERVER_NAME mindig azt az értéket fogja tartalmazni, amit a ServerName direktívának megadtál (az adott virtualhostban).

Mindazonáltal én létrehoznék egy másik virtualhostot (ami elsőként kell betöltődjön a configból), ami betölti majd a default szerepét. Így ha hasonló próbálkozásokat kapsz, fölöslegesen nem dologzik a PHP kódod, hanem az üres default hoszt fogja kezelni őket.

Az, hogy hogyan állítasz be virtualhosztot az disztribúció-függő. Ha Webmint vagy hasonló dolgot használsz annak is meglesz a maga módszere rá.