Ajax & Post biztosítás
Üdv mindenkinek.
Egy olyan elméleti problémán akadtam meg, hogy hogyan tudnám megvédeni az Ajax lekérések fájljait és a Post-olt adatokat feldolgozó fájlokat attól hogy bárki, bármikor megnyithassa a "feldolgozó" fájlokat.
Adott egy oldal - urlap.php - amin van egy űrlap, ami adatokat küld post metódussal a feldolgoz.php-nek.
Hogy tudom a legbiztosabban leellenőrizni hogy a feldolgoz.php mindenképp az urlap.php-től kapott adatot?
Vagy a másik eset, mikor az oldal - nyito.php - időzítve elindít egy ajax lekérést a mikor.php-felé.
Semmit nem küld, csak megjeleníti a mikor.php tartalmát.
De ezt csak akkor kellene tennie ha ajax-al, a nyito.php-ről és annak a domainjéről lett megnyitva.
A Referer kilőve, űrlapnál az isset és a formátumellenőrzés az alap, ajax-nál a X-Requested-With header nem mondható 100%-os biztosnak, a defined-et nem mondanám elegánsnak - bár nem tudom.
Elgondolkodtam hogy esetleg Session-al valahogy meg lehetne ezt oldani...
Betöltéskor megnézem hogy létezik-e az adott session.
Ha nincs, létrehozom és eltárolom benne az akkori dátumot/időt.
Ha van, megnézem hogy a tárolt adat régebbi-e mint pl. 3 perc.
Ha nem régebbi, akkor minden rendben.
Ha viszont régebbi, akkor nem küldhetek 404-et vagy hibaoldalt/hibaüzenetet mert lehet hogy egy űrlapon eltölt a felhasználó 3 percnél többet... sőt.
Tehát szerintem ez az ötletem sem a legjobb.
Lehet egyáltalán ilyen "csak úgy" lekéréstől valahogy védekezni?
Előre is köszönöm
■ Egy olyan elméleti problémán akadtam meg, hogy hogyan tudnám megvédeni az Ajax lekérések fájljait és a Post-olt adatokat feldolgozó fájlokat attól hogy bárki, bármikor megnyithassa a "feldolgozó" fájlokat.
Adott egy oldal - urlap.php - amin van egy űrlap, ami adatokat küld post metódussal a feldolgoz.php-nek.
Hogy tudom a legbiztosabban leellenőrizni hogy a feldolgoz.php mindenképp az urlap.php-től kapott adatot?
Vagy a másik eset, mikor az oldal - nyito.php - időzítve elindít egy ajax lekérést a mikor.php-felé.
Semmit nem küld, csak megjeleníti a mikor.php tartalmát.
De ezt csak akkor kellene tennie ha ajax-al, a nyito.php-ről és annak a domainjéről lett megnyitva.
A Referer kilőve, űrlapnál az isset és a formátumellenőrzés az alap, ajax-nál a X-Requested-With header nem mondható 100%-os biztosnak, a defined-et nem mondanám elegánsnak - bár nem tudom.
Elgondolkodtam hogy esetleg Session-al valahogy meg lehetne ezt oldani...
Betöltéskor megnézem hogy létezik-e az adott session.
Ha nincs, létrehozom és eltárolom benne az akkori dátumot/időt.
Ha van, megnézem hogy a tárolt adat régebbi-e mint pl. 3 perc.
Ha nem régebbi, akkor minden rendben.
Ha viszont régebbi, akkor nem küldhetek 404-et vagy hibaoldalt/hibaüzenetet mert lehet hogy egy űrlapon eltölt a felhasználó 3 percnél többet... sőt.
Tehát szerintem ez az ötletem sem a legjobb.
Lehet egyáltalán ilyen "csak úgy" lekéréstől valahogy védekezni?
Előre is köszönöm
Nehéz
A normálisabb AJAX keretrendszerek megfelelő HTTP fejlécekkel látják el a kérést, ezért ezt tudod ellenőrizni szerver oldalon. Valamint szokott benne lenni referer HTTP fejléc is, ami pedig mutatja, hogy honnan érkezett a kérés. Ha ezek nem elegek, akkor bevezethetsz esetleg valami munkamenet azonosítót, amit beleeszkábálsz a JavaScript kódba, és ezt mint GET paraméter már át tudod adni a PHP-nek. Persze ez sem tökéletes védelem, mert ha valaki nagyon ért hozzá simán megkerülheti mindent.
Az
X-Requested-With
miért van kilőve? Spontán senki nem fogja kiadni. Hasonlóan aReferer
-hez.Referer átverhető... nem?
És az idei statisztikáimban jó pár refererben van olyan szöveg ami elvileg nem lehetne, azaz kétségek között hiszek benne csak. :)
Az X-Requested-With-et pedig azért mondanám hogy nem biztos, mert ha csak arra hagyatkozok nem ér sokat, mert ír egy html oldalt, benne egy kis javascriptel, ráengedi az adott fájlra és kész...
A sessionban bízok igazán... keresgéltem egy kicsit:
http://www.php.net/manual/en/function.session-regenerate-id.php#87905
Itt leírt az illető egy kódot, hogy jó lenne-e nekem.
Szerinted?
Akármiben
Szórakozás
Volt rá nem egyszer példa hogy egy ajaxal működő hozzászólás mentő fájlt, ami publikus volt ugyan, de captcha kóddal volt védve valaki jópárszor próbálta átverni.
Nem nagy dolog elsőre, de lett egy kis naplófájlom, mivel a captcha kódok normál magyar szavakból állnak, és a sikertelen próbálkozásokat naplózom hogy minél olvashatóbbá tegyem a szót...
Lényegében ennyi...