Zend Framework

Nemrég kezdtem el használni a ZF-et, és mivel szeretem összeírni mit hogyan oldok meg, létrehoztam ezt a fórumot.

A helyesírásomat ne fikázd, tudom hogy szörnyü, ez van sajnos, hiába olvasok 12 éves korom óta baromi sok sci-fit, az írásom nem javul.

Lelkes weblap fejlesztő vagyok, nem értek a dizájnhoz, elboldogulok vele, de nem az én asztalom, a programozást viszont egyenesen imádom.

Remélem már nem tartozom a szakmában a pistikék közé, de még profinak sem nevezném magam, lelkes haladó osztályt választom :)

Ha valamire kíváncsi vagy, segítség kell php jacascript html css témakörben ( ne kérj tőlem olyat hogy ezt csináld meg nekem pls ) csak kérdezz bátran. Értelmes vitákba is szívesen bonyolódom, tágítsuk nézeteinket.

Címkék

code (1) doctrine (2) etc (2) module (1) security (1) users (1) zf (4) Címkefelhő

Friss topikok

Felhasználók bejelentkeztetése - biztonsági szempontból

2010.03.16. 19:57 Mokacuka

Sokat gondolkodtam már rajta, hogy mi lehet a legjobb megoldás biztonsági szempontból a felhasználók bejelentkeztetésénél. Olvastam angol oldalakon róla, és én a következőket vontam le:

  • A login formban mindig használd a Zend_Form_Elements_Hash -t ( és úgy egyébként minden formban, nyugodtan )
  • Személy szerint utálom a captcha és társait, van erre egy jobb, számomra jobb megoldás. Ha egy bizonyos mennyiségnél többszőr elrontotta a jelszavát a felhasználó akkor kitiltom x időre. Elég itt mondjuk 20 mp is, vagy 1 perc, a brute force tipusú támadásokat ez megállítja ( kurvára lelassítja, értelmét veszti ).

    Amikor egy létező felhasznál névvel sikertelen a bejelentkezés ( rossz jelszó miatt ) egy számlálót az adatbázisban növelek egyel, legyen ez faildnum, és egy másikba elmentem az aktuális időpontot, legyen ez lastfaild.

    Ha a lastfaild óta eltelt egy meghatározott idő intervallum, akkor a faildnum -ot 0 -ra állítom.

    Ha a faildnum elért egy bizonyos mennyiséget egy másik értéket, legyen ban, beállítom az aktuális idő + a ban idejére.

    Bejelentkezéskor figyelem, hogy a ban mezőben szereplő időpont kisebb egyenlő, vagy nagyobb e a mostani időpontnál.
     
  • Vigyázz, hogy a beviteli mezőkön keresztül ne lehessen sql kódot bejuttatni az adatbázisodba, mindig escapeld (mysql_real_escape_string) az sql-be átadott paramétereket, SŐT! A legjobb ha a Doctrine -t használod. Ha megtanultad a használatát, nagyon megtudja gyorsítani a munkádat, és ha helyesen használod, nem lesz gondod a mysql inject támadásokkal. Itt egy példa:
    Doctrine_Manager::connection()
        ->gettable('users')
        ->findByDql(' name = ? AND password = ? ', array( $name , $password ) );
    
    A fenti példában a felhasználó neve és jelszava autómatikussan escepelve lesz.
     
  • Másik fontos támadási mód, ha valamilyen módon ellopják  a session-öd, ehez elég csak megtudni a cookiekat, amik a gépedre vannak mentve. Ezellen védelmi módszer:

    A bejelentkezés során, a felhasználó böngészőjébe ments egy cookiet, ami tartalmazza md5-ölve a felhasználó ip -jét, és némi plussz karaktereket előtte és utánna is, lényeg hogy visszafejteni nehéz legyen. pl.:
    $ip=$_SERVER['REMOTE_ADDR']; 
    $cookie = md5( $salt1 . $ip . $salt2);
    setcookie( 'myauth' , $cookie , 0 , '/' , null , false , true );    
    Minden oldal letöltésnél, ugyanezzel a módszerrel generáld le a cookie-t, de a setcookie részt hagyd ki! és vesd össze a böngészőben tárolt cookie-val.

    Ha nem egyeznek meg, akkor ip cím változás volt, azaz a session-t lehet hogy ellopták és egy másik gépről próbálják használni. Itt van a hátránya is ennek a módszernek, ha a felhasználó olyan internet kapcsolatot használ ( pl. egy tűzfal, aminek 2 vagy több internet kapcsolata van és auto ballancing van beállítva rajta ) aminél nem állandóan ugyanaz az ip címe, így nem fogja tudni használni az oldalt.

    Emiatt a probléma miatt, ezt a megoldást csak különössen fontos helyeken használom, pl az admin felhasználóknál.
     
  • Ne használj olyan megoldásokat a jelszó tárolásnál, vagy az előző pontban a cookie létrehozásánál, mint pl.: md5( $salt1 . md5( $ip ) . md5( $salt2 ) );

    Ettől nem lesz biztonságosabb, nehezebben visszafejthető, sőt, md5 -ön belüli md5 esetén még kevesebb lesz a lehetőségek száma, olvasd el a php oldalán az md5-höz tartozó hozzászólásokat itt.
     
  • Minden oldalt körültekintően készíts, soha ne bízz a felhasználók által megadott adatokban! Ez minden programozási nyelvre igaz, anno ez volt az első amit megtanultam a tanárom révén :)
     

 

7 komment

Címkék: security zf users

A bejegyzés trackback címe:

https://zend-framework.blog.hu/api/trackback/id/tr71845158

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Mokacuka 2010.03.16. 20:11:13

@StavrosMenace: hmm? nem ismerem, még googli sem, mire gondolsz?

StavrosMenace 2010.03.16. 23:20:02

@Mokacuka: meg kell írni, dolgozom rajta, lehetőleg kicsi és gyors, nem mvc, nagyrészt oo, generált class cache, session-ök postgresben, csak tárolt függvények, session csak insert vagy update, session salt, rekeying is akár, ip check, reverse proxy ok, kifelé ajax json vagy cli, az authentikáción még gondolkodom

Mokacuka 2010.03.17. 09:47:58

@StavrosMenace: Nem rossz ötlet, benne lennék egy ilyen megírásában, már csak azért is, mert ehhez pár dolgot meg kell még tanulnom.

Revers proxy-t nem használtam még, json is csak elvétve, rekeying után is csak most olvastam, php -ban command line ban használható programot még nem írtam...

Zak 2010.04.23. 00:21:10

csak 1 kérdésem lenne: minek még egy db layert használni a zend-ben, amikor van neki nagyon fasza?

Mokacuka 2010.04.23. 12:05:55

doctrine-re gondolsz? mert sokkal jobb mint a zend sajátja, ha elkezded használni, rájössz, bár minden relativ, kinek mi a jobb.

Főleg akkor érződik a doctrine ereje, ha az ormdesigner -t is használod, www.orm-designer.com
ezzel nagyon gyorsan meg lehet tervezni az egész adatbázist, majd doctrine által használt yml formátumba menthető, amiből a doctrine létre tudja hozni a tábla szerkezetet és a szükséges fájlokat. Innentől már gyerekjáték az egész.

gyorsabb igy fejleszteni, és az idő pénz :)

A Nyíri 2010.05.30. 14:24:03

Helló! ZEND FRAMEWORK fejlesztőt keresek referenciával!!!!!!!

Ezen a telefonszámon lehet érdeklődni a részletekről:+36303396764
süti beállítások módosítása