Autor | Zpráva | ||
---|---|---|---|
Venushja Profil |
#1 · Zasláno: 29. 12. 2008, 11:22:07
Zdravim vas lidi mam tu velky problem s prihlasenim.
Problem je v tom ze kdyz vyplnil Login a Heslo tak se nic ale vubec nic nestane Zde je Kod <? $db_server = "mysql.ic.cz"; $db_login = "****"; $db_password = "*****"; $db_name = "******"; @$spojeni = MySQL_Connect($db_server ,$db_login, $db_password); @MySQL_Select_DB($db_name); if(empty($_COOKIE["ucet"])){ ?> <form method="post"> Login : <input type="text" name="login" class="input"> Heslo : <input type="password" name="passwd"> <input type="submit" value="Přihlásit"> </form> <? $pass=sha1(MD5($passwd)); $datum = date("d.m.Y"); $bb = MySQL_Query("SELECT * FROM users where login ='$login'"); $uu = MySQL_Query("SELECT count(*) FROM users"); $tt=MySQL_Fetch_Array($uu); while ($db= MySQL_Fetch_Array($bb)): if($db[password]==$pass){ MySQL_Query("UPDATE `users` SET `lastlog` = '$datum' WHERE `users`.`login` ='$login'"); SetCookie ("ucet", "$login"); echo"Jste úspěšně nalogován! <meta http-equiv='refresh' content='10'> pokud se vám stránka neobnoví do 10 sekund klikněte <a href='index.php'>sem</a>"; } endwhile; $bb = MySQL_Query("SELECT * FROM users where login ='$login'"); $uu = MySQL_Query("SELECT count(*) FROM users"); $tt =MySQL_Fetch_Array($uu); while ($db= MySQL_Fetch_Array($bb)): if($login!=$db[login]){echo'<font color="red">Vyplnil jste špatně login nebo heslo</font>';}; endwhile; }else{echo"Funguje to?";}; ?> na zadnou podminku nereaguje a uz si s tim nevim rady po 3 dnech skouseni :-( |
||
Aesir Profil |
#2 · Zasláno: 29. 12. 2008, 11:28:55
Venushja:
Zkuste nahradit $passwd za $_POST['passwd'] a analogicky to samé pro $login. Nebylo by od věci ty proměnné taky trochu ošetřit ;) Register Globals |
||
Venushja Profil |
#3 · Zasláno: 29. 12. 2008, 11:37:12
„Venushja:“
„Zkuste nahradit $passwd za $_POST['passwd'] a analogicky to samé pro $login. Nebylo by od věci ty proměnné taky trochu ošetřit ;)“ „Register Globals“ Ne furt ty podminky nereagujou...Ani nevim v cem by to mohlo byt nastaveny to vsechno je ale nereaguje to :-( |
||
bohyn Profil |
#4 · Zasláno: 29. 12. 2008, 11:38:07 · Upravil/a: bohyn
<? // kontrola odeslani formulare if(isset($_POST['login'])) { $pass=sha1(MD5($_POST['passwd'])); // login kontroluj zaroven s heslem $bb = MySQL_Query("SELECT * FROM users WHERE login = '".$_POST['login']."' AND password = '".$pass."'"); // K cemu potrebujes poctet uzivatelu v DB? //$uu = MySQL_Query("SELECT count(*) FROM users"); //$tt=MySQL_Fetch_Array($uu); if(mysql_num_rows($bb) == 1) { MySQL_Query("UPDATE `users` SET `lastlog` = '".$datum."' WHERE `login` ='".$login."'"); SetCookie ("ucet", "$login"); echo"<html><head><meta http-equiv='refresh' content='10'></head>Jste úspěšně nalogován! pokud se vám stránka neobnoví do 10 sekund klikněte <a href='index.php'>sem</a>"; } // chybne zadane heslo nebo uzivatelske jmeno else { echo "Chybny login"; } } // neprihlaseny elseif(!isset($_COOKIE['ucet'])) {?> <form method="post"> Login : <input type="text" name="login" class="input"> Heslo : <input type="password" name="passwd"> <input type="submit" value="Přihlásit"> </form> <? } ?> |
||
Venushja Profil |
#5 · Zasláno: 29. 12. 2008, 11:46:41
bohyn
Hele tendle script funugje akorad nako divne zadam login a heslo a misto prihlasen mi to napise chybny login :-( |
||
bohyn Profil |
#6 · Zasláno: 29. 12. 2008, 12:03:47
Venushja
Mozne duvody: - v databazi musi byt prave jeden par login/password - login i heslo jsou citlive na velikost znaku oprava updatu: $datum = date("d.m.Y"); MySQL_Query("UPDATE `users` SET `lastlog` = '".$datum."' WHERE `login` ='".$_POST['login']."'"); A dale by se hodilo osetrit login proti SQL injection, pred vlozenim do dotazu: $_POST['login'] = mysql_real_escape_string($_POST['login']) |
||
Venushja Profil |
#7 · Zasláno: 29. 12. 2008, 12:13:55 · Upravil/a: Venushja
bohyn
Tak par urcite tam je :-) Znaky jsou v poho. Hele a na me ne tak honem a slozite nejsem zas tak zkusenej :-) A furt to pise To chybny login :-( edit:Kdyz jsem zmenil pihlaseni do DB na jiny stranky kde mam users atd prihlaseni vsechno tak to se prihlasi a objevi se to ale kdyz tam zadam tu databazi co tam mam tedka tak to naúpise chybny login |
||
bohyn Profil |
#8 · Zasláno: 29. 12. 2008, 12:19:27
Venushja
Tak si jeste zkus vypsat vstupy po tom prvnim dotazu na databazi a porovnej to s tim co v ni skutecne mas: echo $pass."<br>" .$_POST['login']."<br>" .mysql_num_rows($bb); |
||
Venushja Profil |
#9 · Zasláno: 29. 12. 2008, 12:22:40
bohyn
Tak uz asi vim v cem je rpoblem v heslu vypsalo mi to toto: adcd7048512e64b48da55b027577886ee5a36350 Mutagen 0 Chybny login a v DB mam heslo toto: 0303c6e6494c502e4d59900f69cc50b92eda0865 ale divny je to ze oboje koduju pres sha1(MD5($pass)) |
||
bohyn Profil |
#10 · Zasláno: 29. 12. 2008, 12:29:49
Venushja
- Zkus znovu vytvorit ucet, treba ti to tam zustalo z drivejska kdyz si pouzival neco jineho. - pokud mas diakritiku v hesle, muze to zpusobovat jine kodovani registracniho formulare a prihlasovaciho. |
||
Venushja Profil |
#11 · Zasláno: 29. 12. 2008, 12:33:31
bohyn
Heslo mam 123 jsem daval rpi registraci a pri nalogovani taky v Databazi se ukazuje jenom 1 kodovaci heslo a to todle 0303c6e6494c502e4d59900f69cc50b92eda0865 at zadam jakykoliv heslo do adresare na heslo :-( divny kodovani pres sha1 a md5 v obojim pripade tak nevim no. |
||
bohyn Profil |
#12 · Zasláno: 29. 12. 2008, 12:56:47
Venushja
adcd7048512e64b48da55b027577886ee5a36350 odpovida 123. Problem bude nekde v registraci. |
||
Venushja Profil |
#13 · Zasláno: 29. 12. 2008, 13:03:16 · Upravil/a: Venushja
bohyn
No ale kde Koduju to pres sha1 a MD5 jako todle posilam script na registraci ale me se zda ze to je nesmysl kodovani je prece stejne case 'registrace': $datum=date("d.m.Y"); $password=sha1(MD5($pass)); $db_server = "mysql.ic.cz"; $db_login = "ic_pkde"; $db_password = "*****"; $db_name = "ic_pkde"; @$spojeni = MySQL_Connect($db_server ,$db_login, $db_password); @MySQL_Select_DB($db_name); if($login=="" or $pass=="" or $jmeno==""){ echo'<br><br> <form method=post> Login:<br> <input type="text" name="login" class="input"><br><br> Password:<br> <input type="text" name="pass"><br><br> Jmeno a Příjmení:<br> <input type="text" name="jmeno"><br><br> <INPUT type="submit" value="Registrovat"> </form>';} else{ $bb = MySQL_Query("SELECT * FROM users order by id DESC LIMIT 20"); $uu = MySQL_Query("SELECT count(*) FROM users"); $tt=MySQL_Fetch_Array($uu); while ($db= MySQL_Fetch_Array($bb)): if($login==$db[login]) { echo"<br><br>Účet s názvem <span style='color:red'>$login</span> už existuje<br><br><br> <input value=' Zpět ' onclick='JavaScript:history.back()' class='input' type='button'> ";die;}; endwhile; echo"<h2>Registrace Dokončena<br> <a href='index.php'>Můžeš se přihlásit</a></h2></div>"; MySQL_Query("INSERT INTO users VALUES('','$login','$password','$jmeno','$datum','')"); }; break; |
||
bohyn Profil |
#14 · Zasláno: 29. 12. 2008, 14:07:12 · Upravil/a: bohyn
Problem kde se bere spatne heslo jsem nenasel, ale zkus tento script:
nazvy sloupcu si zmen na to co mas v databazi (u vkladani do DB) // nebyly odeslany zadne nebo jen nektere registracni udaje if($_POST['login'] == "" or $_POST['pass'] == "" or $_POST['jmeno'] == ""){ echo'<br><br> <form method=post> Login:<br> <input type="text" name="login" class="input" value="'.$_POST['login'].'"><br><br> Password:<br> <input type="text" name="pass"><br><br> Jmeno a Příjmení:<br> <input type="text" name="jmeno" value="'.$_POST['jmeno'].'"><br><br> <input type="submit" value="Registrovat"> </form>'; } // vsechny registracni udaje byly odeslany else{ $db_server = "mysql.ic.cz"; $db_login = "ic_pkde"; $db_password = "*****"; $db_name = "ic_pkde"; @$spojeni = MySQL_Connect($db_server ,$db_login, $db_password); @MySQL_Select_DB($db_name); $datum=date("d.m.Y"); $password=sha1(MD5($_POST['pass'])); // osetrit vkladane promene proti SQL injection $_POST['login'] = mysql_real_escape_string($_POST['login']); $_POST['jmeno'] = mysql_real_escape_string($_POST['jmeno']); // zjistit jestli uzivatelske jmeno existuje v databazi $bb = MySQL_Query("SELECT login FROM users WHERE login LIKE '".$_POST['login']."' LIMIT 1"); // uzivatelske jmeno bylo nalezeno, vratit chybu if(mysql_num_rows($bb) == 1) { echo"<br><br>Účet s názvem <span style='color:red'>".$_POST['login']."</span> už existuje<br><br><br> <input value=' Zpět ' onclick='JavaScript:history.back()' class='input' type='button'>"; die; } // uzivatelske jmeno neni v databazi. Vlozit registracni udaje do DB echo"<h2>Registrace Dokončena<br> <a href='index.php'>Můžeš se přihlásit</a></h2></div>"; // pri vkladani do DB je lepsi explicitne vyjmenovat sloupecky MySQL_Query("INSERT INTO users (login, heslo, jmeno, datum_registrace) VALUES ('".$_POST['login']."', '".$password."', '".$_POST['jmeno']."', '".$datum."')"); } } break; |
||
Venushja Profil |
#15 · Zasláno: 29. 12. 2008, 14:58:31
bohyn
Jak uz jsem rikal na me nemuzes s takhle tezkejma scriptama jsem neco jako novacek akorad toho umim o neco vic :-D a vubec se v tom scp co jsi poslal nevyznam teda jen v nekterych casti :-D |
||
bohyn Profil |
#16 · Zasláno: 29. 12. 2008, 16:08:55
Venushja
Predchozi prispevek jsem doplnil o nektere komentare, mozna se v tom lip vyznas. Kod vloz misto toho co jsi posilal (prvni radek "case 'registrace':" tam nech) a vyzkousej. |
||
Venushja Profil |
#17 · Zasláno: 29. 12. 2008, 16:14:50
Tak jsem skusil jeste 1 moznost oddelal jsem z registrace to kodovani aby se to v databazi ukazalo to heslo ale stejne to je furt zakovodany tak vubec nevim co s tim je to zakodovany jako kdyby to tam bylo akorad se zmenilo to zakodovani ale nevim kde se to zakodovalo kdyz tam uz nemam ten prikaz na to
|
||
bohyn Profil |
#18 · Zasláno: 29. 12. 2008, 16:21:38
Venushja
Pravdepodobne mas na sloupecek s heslem navazanou nejakou funkci. |
||
Venushja Profil |
#19 · Zasláno: 29. 12. 2008, 16:25:10
bohyn
No ale na jakou skousel jsem ten tvuj scp a dela to stejny pri registraci jsem dal heslo q napsalo mi to todle a73afd7b4f19571927e4e0c87103c35b9a195556 q 0 Chybny login A heslo v Databazi se ukazalo jako todle 67a74306b06d0c01624fe0d0249a570f4d093747 Uz fakt nevim co s tim :-( |
||
Venushja Profil |
#20 · Zasláno: 29. 12. 2008, 16:39:11
bohyn
ne beru zpet ten tvuj script funguje najednicku :-) ja tam mel spatne nastavenou MySQL query :-) Uz to registruje i dokonce to Prihlasuje :-) |
||
Venushja Profil |
#21 · Zasláno: 29. 12. 2008, 16:46:52
Hele muzu se jeste zeptat co to je ten sql injection?? ze se to musi osetrovat?
|
||
bohyn Profil |
#22 · Zasláno: 29. 12. 2008, 17:26:31
Venushja
SQL injection je ze v pasujes do promene jiny SQL dotaz, nebo jeho cast. Mam SQL dotaz: SELECT * FROM tabulka WHERE id = $id Pokud je id cislo nic se nedeje. Pokud tam ale nekdo zmeni id na "1; DROP TABLE tabulka;" tak vznikne SELECT * FROM tabulka WHERE id = 1; DROP TABLE tabulka; Tak prides o tabulku a vsechna data co v ni mas. Proto se cisla explicitne prevadeji na ciselne typy, treba: $id = (int)$id; a retezce se osetruji (nejlepe) pomoci mysql_real_escape_string(): $str = mysql_real_escape_string($str); Neco malo je o tom na ceske wikipedii - SQL injection. Pokud umis anglicky tak anglicka verze je mnohem obsahlejsi. |
||
Venushja Profil |
#23 · Zasláno: 29. 12. 2008, 17:29:53
jj dik moc ale mam tu rpoblem s tim scriptem co jsi me poslal na prihlaseni :-) Chci aby se po prihlasení objevilo Napr neco jako Prihlasen : $login
a neco podobnyho ale nevim jak to do toho tvyho scriptu vlozit |
||
bohyn Profil |
#24 · Zasláno: 29. 12. 2008, 17:43:05
uzivatelske jmeno mas ulozeno v cookies staci tedy
echo "Prihlasen: ".$_COOKIE['login']; Funguje az po nacteni dalsi stranky po prihlaseni. Pokud to chces vypsat na te strance "Jste úspěšně nalogován!" tak dej echo $_POST['login']; |
||
Venushja Profil |
#25 · Zasláno: 29. 12. 2008, 17:48:00
bohyn
A bude to tam kdyz obnovim tu stranku atd ? |
||
Venushja Profil |
#26 · Zasláno: 29. 12. 2008, 17:50:53
bohyn
Tak to asi malo nechapu nechces mi to cast napsat kam to mam napsat? Rikam zas tak hodne skusenej nejsem a s Cookies se ucim teprv ty 2 nebo 3 dny co jsme psal todle rpihlaseni :-D |
||
bohyn Profil |
#27 · Zasláno: 29. 12. 2008, 17:58:43
Stanka 1:
// nastavit cookie setcookie("login", $_POST['login']); // vypsat cookie echo $_POST['login']; Stranka 2: // vypsat hodnotu cookie echo $_COOKIE['login']; Na stance 1 nastavis hodnotu cookie, ale promena $_GOOKIE['login'] jeste neni dostupna, je treba pouzit $_POST['login'] nebo $_COOKIE['login'] = $_POST['login']; echo $_COOKIE['login']; Na vsech dalsich strankach uz bude gungovat $_COOKIE['login']. Dokud nezavres prohlizec. |
||
Venushja Profil |
#28 · Zasláno: 29. 12. 2008, 18:05:18 · Upravil/a: Venushja
bohyn
Tak tady budu mit rpoblem :-D Ja to nemam na 2 stranky ale mam to na 1 v menu to prihlaseni takze se to obnovi na tu stejnou stranku skus to sa co ti to udela www.pkde.ic.cz prihlas se Login : o a heslo : o skus to a az se to obnovi tak se v tom miste nic neobjevi odhlasis se timdle www.pkde.ic.cz/index.php?page=logout Skus to a rekni mi do jakyho mista mam napsat to Prihlasen : $login Edit : Jedine ze bych mohl udelat 2 menu a po prihlaseni by se objevilo to 2 menu a po odhlaseni to 1 |
||
radas Profil * |
#29 · Zasláno: 29. 12. 2008, 18:25:07
a co když uživatel bude mit vypnuté cookie? nebylo by lepší do session?
|
||
bohyn Profil |
#30 · Zasláno: 29. 12. 2008, 18:30:14
Venushja
Nepochopil si co sem se snazil rict. Stranka 1 = stranka na ktere nastavujes cookie Stranka 2 = Jakakoliv stranka po refreshi. Na nazvu stranky nezalezi. Takze kdyz na index.php nastavis cookie, pak das refresh tak cookie bude fungovat. Vyzkousej si tohle: // cookie.php if(!isset($_COOKIE['test'])) { setcookie("test", "Ahoj"); echo "Cookie, neni nastavena"; } else { echo "Cookie 'test' = ".$_COOKIE['test']; } Uloz si to na server, nacti v browseru a pak dej F5. |
||
Téma pokračuje na další straně.
|
0