| 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