:) Si myslim, ze sha1 je dostacujici pro zatim nefungujici projekt. Zbytecne ztracis cas, ktery muzes venovat ostatnim castem hry. Az tam budes mit tak 50 lidi, tak pak ma smysl se tim zabyvat, muzes tydny predelavat prihlasovani v testovaci slozce. Dokonce ji muzes zverejnit, aby ti to obcas otestovali hraci nez prepises oficialni verzi.
Vis, jak probiha slovnikovy utok?
- zkusi se nejcastejsi hesla, 1000
- zkusi se md5(nej. hesla)
- zkusi se md5(md5(nej. hesla))
- podobne tabulky pro sha1
- podobne pro kombinace md5(user + nej. hesla)
To mas treba 50.000 moznosti. Takze, tak jak to mas napsane, tam neni zadna bezpecnost.
- Minimalne bys tam musel pridat dalsi retezec.
- Pak bys musel zabezpecit, aby uzivatel nezustal nekde prihlaseny, protoze prohlizec si do zavreni okna vetsinou drzi session.
- Take heslo nejcasteji odkouka sestra, kamarad, kdyz ti stoji za zady.
- A kdyby slo o komercni sw, tam se to resi nejcasteji tak, ze dojdes do firmy. Tvrdis, ze jsi objednany IT a mas neco provest na pc, ze za 15 minut problem vyresis, staci, kdyz se ti uzivatel naloguje. Idealni cas je pred ucetni uzaverkou, kdy ta pani nema cas. Ze ty si tam nahravas z flashky malware a ruzne odchytavace klavesnice posilajici text nesifrovane nekam na inet, to ji nezajima, nemusi si vsimnout :)
SQL injection
$login_check = mysqli_query($con,"
SELECT `id`
FROM `user`
WHERE `username`='$username' AND `password`='".sha1($password)."'
") or die (mysqli_error($con));
WHERE `username`='$username'
Doufam, ze mas $username dobre escapovane, protoze, kdybych ti do formularoveho policka zadal
$username = ' OR '1'='1
dostanes sql prikaz, podminku
WHERE `username`='$username'
WHERE `username`='' OR '1'='1' -- prvni je false, ale druha podminka je true
:) Pak mne prihlasi na prvniho uzivatele. Samozrejme, ty tam mas dal jeste heslo, ale toho by se dalo take zbavit jiste nejakou fintickou, treba " nebo ;"
"...WHERE `username`='' OR '1'='1'" - string zacina dvojitou uvozovkou a take ji konci.