+ Hozzászól a témához
Oldal: 3 / 4 ElsőElső 1234 UtolsóUtolsó
Eredmény: 21 - 30 (34) összesen

Téma: Weboldalkészítés php-oop alapon. 1.rész

  1. #21
    kow
    kow nem elérhető
    KowDerMei$ter Blog: iScaffold 2.11 - forráskód generálás CodeIgniterhez
    kow logója
    Csatlakozott
    07-05-09
    Hely
    Budapest
    Hozzászólás
    1.476

    Alapbeállítás re: Weboldalkészítés php-oop alapon. 1.rész

    A jelszót mint mindig MD5-l lesz lekódolva, és Geri figyelemfelkeltő tanácsára INDEX-k fogok elhelyezni az adatbázisban amit utólag itt is frissítek...
    Ezesetben SQL-ben pont elég a varchar(32) a jelszónak, máshol is láttam, hogy belőtted max-ra az értékeket, mindegy, hogy mit fognak majd tárolni.
    Tudom, hogy ma már egy gigabájt tárhely egy finom tábla csoki árába kerül, de az adatbázis optimalizálásra azért illik figyelni.



  2. #22
    MinderBinder edem logója
    Csatlakozott
    09-09-02
    Hely
    Budapest
    Hozzászólás
    1.108

    Alapbeállítás re: Weboldalkészítés php-opp alapon. 1.rész

    Idézet TLoF eredeti hozzászólása Hozzászólás megtekintése
    Akkor gyorsan tegyük hozzá még azt, hogy a publikus rainbow táblák kora óta nem tárolunk jelszót egyszerű md5 hasheléssel, hiszen igy pár másodperc alatt vissza fejthető.

    A jobb megoldás az, hogy a legalább egy egyedi stringet bele rakunk mondjuk a weblap nevét.
    Kód:
    $passwd_hash = md5('weboldalcim' . $_POST['passwd']);
    Ez sem rossz módszer, de azért még mindig sérülékenyebb az md5 táblákra, hiszen állandó a kódolási algoritmus.

    A másik módszer, hogy valami változó stringet használunk kódoláshoz. Ha kikötöd, hogy a felhasználó nem cserélhet login name-t. akkor jó megoldás a következő:
    Kód:
    $passwd_hash = md5($_POST['user'] . $_POST['passwd']);
    Ezzel sikerült elérned, hogy minden jelszó egyedi hashelést tartalmaz, vissza fejtése elég macerás.

    Lehet arra hivatkozni, hogy az sha1 es hosszabb stringeket generál, és az biztonságosabb, viszont a rainbow táblás módszer ellen ez a tényező nem számit.
    Azt hiszem, hogy én le vagyok maradva. Annak idején a suliban úgy tanultuk, hogy az md5 az egyirányú nem visszafejthető titkosítás. :O Tévedek?

    Szerk.: Megkérdeztem barátnőmet, Wiki-t és ő tudott választ adni, mint általában --> sózni kell a jelszavakat!


    Utoljára módosítva: edem által : 2010-02-01 19:45

  3. #23
    'Say Hello To My Little Friend'
    Csatlakozott
    10-02-03
    Hozzászólás
    5

    Alapbeállítás re: Weboldalkészítés php-oop alapon. 1.rész

    hello..
    egy két személyes megjegyzés az adatbázis elgondolásokhoz..
    legyen egy tábla ahol csak a user azonositoja, jelszava, ipje, session azonositoja, esetlegesen egy statuskod legyen.. ennyi és nem több!
    indexelve a nickre!
    pw: sha1(md5(string))
    igen jol tudod valoban md5 egyiranyu, de ha te lekodolod a jelszo szot md5tel az itt is 'efc847fa5a386a38fcc9d0573bb87272' lesz meg akarhol mashol is.. ezert vannak spéci emberkék akik felállitanak szép nagy táblázatot mindenféle kriksz kraksz karaktersorozatokkal, és megprobálják megtalálni benne a 'efc847fa5a386a38fcc9d0573bb87272' karaktersorozatot.. és már tudja is mi az visszakodolva, de elvileg ..és igen! van rá a gugliban megannyi hiteles oldal egy bizonyos md5 karakterlánc visszafejtésére..és igen a jelszo szó volt az! probald ki!
    alapszabály tokéletes biztonsag nincs! nem is lesz soha! ezert soha ne elegedj meg egy titkosito fuggvennyel! minimum a 2, de nem rossz ha 3-4 fuggvenyt raeresztesz..
    utolag nem celszeru modositani sem az indexeken sem az adatmezok tipusain, hosszain, mert azok rontják a szerver hatásfokát.. tapasztalat! mindenképpen először át kell gondolni milyen funkciok kellenek milyen adattáblák mik a minimális adattipusok (lasd idhez nem bigintet hasznalsz hanem simán intet!!!), megfogalmazod melyek azok a mezok amik alapjan 90% hogy keresni fogsz, és mentesz!
    aztán legyen egy külön tábla ahol a user minden egyéb marhasáéga találhato, szallitasi info, szzuletesi datum, anyja neve 6 peldanyban stb stb.. a lenyeg az a login adat egy kulon tablaban legyen es semmi mas csak ami szigoruan az azonositashoz kell!!.. most ennyi!



  4. #24
    'Say Hello To My Little Friend'
    Csatlakozott
    10-02-03
    Hozzászólás
    5

    Alapbeállítás re: Weboldalkészítés php-oop alapon. 1.rész

    bocsi elfelejtettem.. ilyen még csak véletlenül se jusson eszedbe hogy "select * from user where pw=" . $_POST['pw']...
    sql injection? mysql_escape_string($_POST['pw']) legalább!!
    továbbá nem select * hanem select username, pw, mail, sessid [...] from user...
    mert egyszerűbb leirni hogy *, de tobb 100ezer soros soronként legalább 10mezős táblákban másodpercekkel is ronthatja a teljesitményt hogy minden adatot áttol az adatbázisszerver a webszervernek, amikor nekunk pl csak a username vagy a mail kell.. minek tolja át a többit is? felesleges hálozati forgalom!
    és célszerű leszokni a nickes azonositasrol.. minden mailhoz 99.99%ban egy ember tartozik, mig tobb ember akarhat egyszerre vicus98 lenni.. mail hatásosabb, és kötöttebb formailag mint egy nick..
    és mindjárt itt vagyunk,
    $result= "SELECT nick FROM user WHERE mail='". html_entities($_POST['mail']) ."' AND pw='". mysql_escape_string($_POST['pw']) . "' LIMIT 1";
    if (mysql_num_rows($result)==1){ //akkor és csak akkor, ha pontosan 1 sor van!!
    ...
    ...
    ..
    }
    else {
    header("Location: index.php");
    }
    most ennyi..



  5. #25
    MinderBinder edem logója
    Csatlakozott
    09-09-02
    Hely
    Budapest
    Hozzászólás
    1.108

    Alapbeállítás re: Weboldalkészítés php-oop alapon. 1.rész

    Ehhez az utóbbihoz hozzátenném azt, hogy igaz, hogy érdemes * helyett kiválasztani a konkrét mezőket, de ha pl tudod, hogy csak 1 rekordot fog találni (pl userhez tartozó password), akkor érdemes betenni a végére egy LIMIT 1-et is, mert akkor nem keresgél az egész táblában, hanem ha megtalálta, amit beírtál, akkor vissza is tér rögtön.

    A másik az, hogy érdemes VARCHAR helyett sima CHAR-t használni szerintem, mert így ha minden meződ a táblában fix hosszúságú, akkor az SQL gyorsabban tud benne keresni, mert előre tudja, hogy hol van a következő mező és nem kell számolgatnia. Szerintem az a pár bájt nem éri meg, amennyit ezzel megspórolsz, mert egy merevlemez még mindig olcsóbb, mint egy processzor.



  6. #26
    Bölcs
    Csatlakozott
    07-08-28
    Hozzászólás
    715

    Alapbeállítás re: Weboldalkészítés php-oop alapon. 1.rész

    Árny: A fentebb leirt dologhoz annyit, hogy fölöslegesen darabolod fel a user táblát több részre, hiszen igy ha szükséged van az adatra 2 lekérdezést, vagy rosszabb esetben egy join -t kell kiadnod, amivel buktad a fenti esetben jelentkező elenyésző töbletet.

    A * helyett akkor éri meg a felsorolást választani ha olyan text vagy blob tipusú mező van a táblában amire az adott lekérdezésnél nincs szükséged. ha csak char, varchar, int, etc.. tipusú meződ van és nincs 200 mező a sorban akkor megéri kikérni az egészet, hiszen egy egyből ki tudja adni az sql szerver nem kell még egy sorba rendezést is lefutattnia.

    Azonban ezek a részek már a micro optimalizáció részbe tartoznak, és alap esetben nem éri meg foglalkozni vele, hiszen egy átlagos oldal messze nem fut akkora terheléssel, hogy egy ilyen rendszeroptimalizáció kifizetődő legyen.



  7. #27
    MinderBinder edem logója
    Csatlakozott
    09-09-02
    Hely
    Budapest
    Hozzászólás
    1.108

    Alapbeállítás re: Weboldalkészítés php-oop alapon. 1.rész

    Idézet TLoF eredeti hozzászólása Hozzászólás megtekintése
    Árny: A fentebb leirt dologhoz annyit, hogy fölöslegesen darabolod fel a user táblát több részre, hiszen igy ha szükséged van az adatra 2 lekérdezést, vagy rosszabb esetben egy join -t kell kiadnod, amivel buktad a fenti esetben jelentkező elenyésző töbletet.

    A * helyett akkor éri meg a felsorolást választani ha olyan text vagy blob tipusú mező van a táblában amire az adott lekérdezésnél nincs szükséged. ha csak char, varchar, int, etc.. tipusú meződ van és nincs 200 mező a sorban akkor megéri kikérni az egészet, hiszen egy egyből ki tudja adni az sql szerver nem kell még egy sorba rendezést is lefutattnia.

    Azonban ezek a részek már a micro optimalizáció részbe tartoznak, és alap esetben nem éri meg foglalkozni vele, hiszen egy átlagos oldal messze nem fut akkora terheléssel, hogy egy ilyen rendszeroptimalizáció kifizetődő legyen.
    Ebben végülis van igazság, de szerintem az egy jó dolog, ha már eleve úgy rögzülnek a dolgok, hogy amikor query-t írsz, akkor ezek rögtön az eszedbe jutnak. Senkinek nem fáj, ha pár plusz karaktert beírsz minden lekérdezésbe.



  8. #28
    Bölcs
    Csatlakozott
    07-08-28
    Hozzászólás
    715

    Alapbeállítás re: Weboldalkészítés php-oop alapon. 1.rész

    Vegyünk egy egyszerü esetet.

    A tábla felépitése a következő esetet:

    id => int(10)
    name => varchar(20)
    passwd=> varchar(32)
    email => varchar(128)
    hash => varchar(64)

    Ha erre azt mondod, hogy select * from tábla akkor egyszerüen vissza dobja a sort.
    Ha azt mondod, hogy select hash, passwd, email, name, id from tabla akkor elősször beolvassa a sort, átrendezi a változók sorrendjét, és vissza adja az eredményt. Tehát nem érte meg a felsorolást. Ha 1-2 mezőt kihagysz, akkor még mindig nem éri meg a dolgot.

    Ha hozzá teszel két mezőt

    bemutatkozas => text
    szuletes => datetime
    foto => blob

    Akkor * hozza magával a text, blob tipusú mezőket ami már nem jó dolog, hiszen ezek külön területen vannak tárolva, csak be vannak linkelve a táblába, tehát ha ezeket kihagyod akkor többet spórolhatsz.

    A dolog konkluziója, hogy erősen a tábla felépitésedtől, és az adatbázisodhoz való csatlakozás sebességétől függ az, hogy milyen formában érdemes ezeket használni. Nincs olyan ököl szabály ami csak az egyik / csak a másik esetet indokolná.



  9. #29
    'Say Hello To My Little Friend'
    Csatlakozott
    10-02-03
    Hozzászólás
    5

    Alapbeállítás re: Weboldalkészítés php-oop alapon. 1.rész

    TLoF
    igazad van, de:
    a 2-ős usertabla azert kell, meert minden egyes belépés és azonositast kovetelo muvelethez elegendo csak a usernam-pass-ip-hashid 4est hasznalni, még id sem kell.. ez szerintem az esetek 80%át fogja kitenni, mig a maradek 20 90-95%át goja kitenni az hogy a user meg akarja nezni neadjisten valtoztatni a profiljat, ahol mar celszeru lekerdezni a reszletes userinfot, ami viszont egy masik tablaban van!
    plusz ugy tudom a mysql szeret memoriat eszegetni, igaz nem olyan draga, de ha hagyjuk eléggé bekajál.. ezért célszerű csak azokat a táblákat és velük az adatokat a memóriában tartani és kezelni, amiket muszály! tehat nem teszzunk semmilyen mezot az alapok mellé, azt szigoruan tegyük külön táblába!!! valamint abban Edemnek van igaza, valoban ezekl melyebb dolgok, magam is csak most kezdem kihaszalni ezeket, de ha mar egyszer tanulunk vagy nekiallunk valami nagyot alkotni, mar az elejen legyen meg az az info ami barmikor elonyt jelent.. ne akkro kezdjunk vakarozni amikor mar haldoklik a rendszer, porog a proc zbala a mysql zakatol a vinyo, hiszen megfelelo tervezessel es korultekintessel legalabb 30% eroforras takarithato meg!
    szvsz..



  10. #30
    MinderBinder edem logója
    Csatlakozott
    09-09-02
    Hely
    Budapest
    Hozzászólás
    1.108

    Alapbeállítás re: Weboldalkészítés php-oop alapon. 1.rész

    Idézet TLoF eredeti hozzászólása Hozzászólás megtekintése
    Vegyünk egy egyszerü esetet.

    A tábla felépitése a következő esetet:

    id => int(10)
    name => varchar(20)
    passwd=> varchar(32)
    email => varchar(128)
    hash => varchar(64)

    Ha erre azt mondod, hogy select * from tábla akkor egyszerüen vissza dobja a sort.
    Ha azt mondod, hogy select hash, passwd, email, name, id from tabla akkor elősször beolvassa a sort, átrendezi a változók sorrendjét, és vissza adja az eredményt. Tehát nem érte meg a felsorolást. Ha 1-2 mezőt kihagysz, akkor még mindig nem éri meg a dolgot.

    Ha hozzá teszel két mezőt

    bemutatkozas => text
    szuletes => datetime
    foto => blob

    Akkor * hozza magával a text, blob tipusú mezőket ami már nem jó dolog, hiszen ezek külön területen vannak tárolva, csak be vannak linkelve a táblába, tehát ha ezeket kihagyod akkor többet spórolhatsz.

    A dolog konkluziója, hogy erősen a tábla felépitésedtől, és az adatbázisodhoz való csatlakozás sebességétől függ az, hogy milyen formában érdemes ezeket használni. Nincs olyan ököl szabály ami csak az egyik / csak a másik esetet indokolná.
    Aha, így már értem. Jól van, szerintem elraktározom az infot az agyamba, hogy ezt is tudjam. ^^

    Apropo, mikor jön a folytatás?



+ Hozzászól a témához

A téma címkéi:

Hozzászólás szabályai

  • Új témákat nem hozhatsz létre
  • Válaszokat nem küldhetsz
  • Fájlokat nem csatolhatsz
  • A hozzászólásaidat nem módosíthatod

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76