Elég nyakatekert a cím, de arra gondoltam, végre itt az idő, hogy a weboldalakba – főleg általam – beépített adatlapokat túlbiztosítsam. Mire is gondolok?

Vegyünk egy mezei példát. Adott egy form, ami adatbevitelre szolgál. A mezők értékének ellenőrzését vélhetőleg valamilyen javascript kerettel oldjuk meg, ahogy már jó ideje csinálom, és persze majdnem mindenki más is. Valószínűleg JQuery-vel dolgozunk, de ez most mellékes.

 lényeg, hogy ellenőrzés nélkül nem megy el a post, mert azt is a JS csinálná. Rendben. Na most jön a képbe mondjuk egy rossz ember, aki kihámozza, hogy hova is küldenénk az adatokat befele, és nem a szerveren található formot használja, hanem mondjuk az ő szerverén lévőt. Mivel postolásnál kliens IP-t látunk – és tegyük fel, nem vagyunk felkészülve az IP váltásra, ahogy egyébként a programozok 95% biztosan nincs -, akkor simán elfogadjuk tőle az adatokat.

Mivel én lusta vagyok, PHP oldalon igazi validálást nem csinálok már, csak SQL injection elleni védelmet, hámozást hajtok végre a kapott értékeken, így gyakorlatilag az ellenőrzést kikerülve bármit beküldhetnek nekem.

Erre van egy tippem, gyakorlatilag ez egészül ki még egy kis feature-val. Még a form küldése előtt megcsinálom.

Megfogom a kliens IP címét, böngésző azonosító stringjét (user agent, ami pl. így néz ki:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36

a két adatot összefűzöm, és egy saját titkos szóval (salt), és PHP crypt függvénnyel lekódolom (egyébként kb. ennyi lesz: dfqWdUuHrmvRw, és azért kódolom, mert legyen már benne valami kódolás 😀 ),. Elteszem sessionbe, és majd postoláskor egyeztetem. Mégpedig úgy, hogy az adatok érkezésekor ugyanezeket a paramétereket (PHP $_SERVER változóban vannak egyébként) lekérdezem, megint megcsinálom a kódolást, és ha egyezik a kapott titkosított szöveg, akkor zöld út.

Na de egy újabb probléma van. Tegyük fel, hogy rossz fiú a böngészőben át tudja írni a mi forrásunkat, befolyásolva ezzel a formot és annak működését (ha jól gondolom, működik is, mert olyan van, amivel át tudom írni a forrást, egy post idejére biztosan, tartósan nem, tehát csak azt módosítja, amit lekért, és majd visszaküld, nem magát a weboldalt). Na, ez a módszer az ellen nem véd.

De mi van akkor, ha mondjuk én fogom, és a formom kimenetét is ugyanígy lekódolva tárolom, vagy mondjuk egy crc, vagy md5sum értéket tárolok le. Na, az jó lehet, csak ezzel az a baj, hogy még azt nem tudom, postoláskor honnan fogom látni, hogy a küldő form milyen, mert hogy ez nem annyira megfogható, hiszen az én formom nem változik a szerveren… Jájjj!

Na szóval! Ha valakinek lenne ötlete, esetleg kijavítana, ötletet adna, azt szívesen venném! Úgy hiszem nem hülyeség ez, érdemes beépíteni, pláne, hogy egész kevés kód kell hozzá, és könnyen beilleszthető utána.

Ha valamiben tudatlan vagyok/voltam, sorry!

0.00 avg. rating (0% score) - 0 votes

Leave a comment

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük