Autor | Zpráva | ||
---|---|---|---|
Ajtak Profil |
Zdravím. Chtěl bych poradit, proč mě to pustí k uložení prázdného hesla? Kde mám chybu?
Díky mockrát <?php define('INCLUDE_CHECK',true); require 'connect.php'; require 'functions.php'; // Those two files can be included only if INCLUDE_CHECK is defined session_name('xxxx'); // Starting the session session_set_cookie_params(2*7*24*60*60); // Making the cookie live for 2 weeks session_start(); if($_SESSION['id'] && !isset($_COOKIE['xxxx']) && !$_SESSION['rememberMe']) { // If you are logged in, but you don't have the tzRemember cookie (browser restart) // and you have not checked the rememberMe checkbox: $_SESSION = array(); session_destroy(); // Destroy the session } ?> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <!-- <xxxx> --> <table border="0" cellspacing="3" cellpadding="3" align="center"> <form method="post" action="".$self.""> <tr> <td height=20px background="/colorbox/images/yellow.png" colspan="2" align="center"><font color="#ffffff">Změna hesla</font></td></tr> <tr><td colspan=2> <?php include 'connect.php'; $username = protect($_POST['username']); $password = sha1($_POST['password']); $confirm = sha1($_POST['passconf']); $email = protect($_POST['email']); $ip = $_SERVER["REMOTE_ADDR"]; $datem = Date("j.m.Y - H:i:s", Time()); $errors = array(); function protect($string){ $string = mysql_real_escape_string($string); $string = strip_tags($string); $string = addslashes($string); return $string; } if(!$_POST['submit']){ echo " </td></tr> <tr><td>Heslo:</td><td><input type=\"password\" name=\"password\"></td></tr> <tr><td>Heslo znovu:</td><td><input type=\"password\" name=\"passconf\"></td></tr> <tr><td align=\"left\"><input type=\"submit\" name=\"submit\" value=\"Změnit\"></form></td> </table> " ; }else { if(!$password){ $errors[] = "Heslo nebylo zadáno!"; } if($password){ if(!$confirm){ $errors[] = "Ověřovací heslo nebylo zadáno!!"; } } if($password && $confirm){ if($password != $confirm){ $errors[] = "Ále, chybička se vloudila :( - Neshoda hesel </td></tr> <tr><td>Heslo:</td><td><input type=\"password\" name=\"password\"></td></tr> <tr><td>Heslo znovu:</td><td><input type=\"password\" name=\"passconf\"></td></tr> <tr><td align=\"left\"><input type=\"submit\" name=\"submit\" value=\"Změnit\"></form></td> </table> "; } } if(count($errors) > 0){ foreach($errors AS $error){ echo $error . "<br>\n"; } }else { $ssn = $_SESSION['id'] ; $sql4 = "UPDATE `authme` SET `password` = '$password' WHERE id = '$ssn' "; $res4 = mysql_query($sql4) or die(mysql_error()); echo "<font align=\"center\">Změna hesla proběhla úspěšně. "; } } ?> |
||
jenikkozak Profil |
#2 · Zasláno: 8. 8. 2012, 16:20:28
Ověření existence hesla je nutné udělat před tím, než toto heslo (byď by šlo o prázdný řetězec) zahashuješ. Ten hash totiž vždy existuje, takže podmínka na řádku 77 nemůže být splněna.
|
||
Ajtak Profil |
Tak jsem ten hash odstranil, ale stejně bez úspěchu
<?php include 'connect.php'; function protect($string){ $string = mysql_real_escape_string($string); $string = strip_tags($string); $string = addslashes($string); return $string; } if(!$_POST['submit']){ echo " </td></tr> <tr><td>Heslo:</td><td><input type=\"password\" name=\"password\"></td></tr> <tr><td>Heslo znovu:</td><td><input type=\"password\" name=\"passconf\"></td></tr> <tr><td align=\"left\"><input type=\"submit\" name=\"submit\" value=\"Změnit\"></form></td> </table> " ; }else { if(!$password){ $errors[] = "Heslo nebylo zadáno!"; } if($password){ if(!$confirm){ $errors[] = "Ověřovací heslo nebylo zadáno!!"; } } $errors = array(); if($password && $confirm){ if($password != $confirm){ $errors[] = "Ále, chybička se vloudila :( - Neshoda hesel </td></tr> <tr><td>Heslo:</td><td><input type=\"password\" name=\"password\"></td></tr> <tr><td>Heslo znovu:</td><td><input type=\"password\" name=\"passconf\"></td></tr> <tr><td align=\"left\"><input type=\"submit\" name=\"submit\" value=\"Změnit\"></form></td> </table> "; } } if(count($errors) > 0){ foreach($errors AS $error){ echo $error . "<br>\n"; } }else { $ssn = $_SESSION['id'] ; $sql4 = "UPDATE `authme` SET `password` = '$password' WHERE id = '$ssn' "; $res4 = mysql_query($sql4) or die(mysql_error()); echo "<font align=\"center\">Změna hesla proběhla úspěšně. "; } } ?> |
||
jenikkozak Profil |
#4 · Zasláno: 8. 8. 2012, 16:51:41
Ajtak:
V pozměněném skriptu spoléháš na zapnuté register globals, což není dobrá volba. |
||
Ajtak Profil |
#5 · Zasláno: 8. 8. 2012, 17:09:24
Tak, prosím o upravení kódu, jak toto vyřešit. Posílat heslo bez sha1 na způsob $_POST['password'] nechci. Díky za pomoc
|
||
jenikkozak Profil |
#6 · Zasláno: 8. 8. 2012, 17:37:01
1) Ověřit, zda heslo není špatně, můžeš pomocí zápisu
if(isset($_POST["password"]) AND trim($_POST["password"])!=""){/*heslo je vyplněno*/} .
2) Přepsat názvy proměnných přejatých z formuláře tak, aby odkazovaly na položku pole, tedy změnit např. $password za $_POST["password"] zvládneš jistě sám. 3) V HTML se ti kříží tagy. Nemůžeš uzavírat <form> uvnitř buňky, když uvnitř této buňky formulář nezačíná. |
||
Časová prodleva: 13 let
|
0