ugrás a tartalomhoz

Ajax & Post biztosítás

vtsoftware · 2011. Okt. 28. (P), 21.45
Ü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
 
1

Nehéz

Poetro · 2011. Okt. 28. (P), 22.29
Amit lehet, hogy bevezetsz egy új űrlapmezőt, amit véletlenszerűen generálsz mondjuk munkamenet adatok alapján. Ezt belerakod az űrlapodba. Mivel erről a mezőről csak az urlap.php tud, és minden egyes alkalommal véletlen (de mivel munkamenetben eltároltad, tudod, mit kell keresni), ezért lehet ellenőrizni, hogy ez az űrlap-e, amit te vársz.

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 a Referer-hez.
2

Referer átverhető... nem?

vtsoftware · 2011. Okt. 28. (P), 23.30
A Referert én azért lőném ki, mert Delphi-ben is megoldható egyedi referer küldése, és mintha úgy rémlene hogy a referer fejléc küldését ki lehet kapcsolni... vagy 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?
3

Akármiben

Poetro · 2011. Okt. 29. (Szo), 00.37
A fejléceket akármiben meg lehet hamisítani, nem kell hozzá Delphi, ott a PHP is akár. Most igazából azt nem tudjuk, hogy mi a cél? Egy átlagos felhasználó nem fogja tudni átverni az oldaladat, egy haladó felhasználót pedig egyik megoldás sem fogja megállítani. Egyszerűen ír egy botot, ami kezel sütiket meg HTTP fejléceket, és máris azt csinál, amit akar. Szóval azt kellene tisztázni, hogy mit is akarsz elérni, mitől akarsz és mit védeni.
4

Szórakozás

vtsoftware · 2011. Okt. 29. (Szo), 01.14
Leginkább azokat szeretném valahogy eltántorítani a próbálkozástól akik szórakozásból elkezdenek tesztelgetni.

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...