Bejelentkezési hiba
Van egy login rendszerem. A hibája az, hogy ha valaki rossz adatot ír be (pl nincs az adatbázisban olyan felhasználónév) és ezt a rossz adatot elküldi, akkor kiírja a hibát, de ha még egyszer elküldi, akkor beengedi az oldalra. Ezt hogy lehetne kiküszöbölni? Ez a kódom:
■
<?php
if($_POST['login']){
$name=mysql_real_escape_string(trim($_POST['name']));
$pass=mysql_real_escape_string(md5($_POST['pass']));
$login=true;
if(!$name){
echo "<div id='error2'>Add meg a felhasználóneved</div>";
$login=false;
}
if(!$pass){
echo "<div id='error2'>Add meg a jelszavad</div>";
$login=false;
}
if($login){
$result=mysql_query("SELECT * FROM user WHERE name='$name' AND pass='$pass'");
while($row=mysql_fetch_array($result)){
$name=$row['name'];
$acti=$row['acti'];
}
if(mysql_num_rows($result)!=1){
echo "<div id='error2'>Hibás felhasználónév és/vagy jelszó</div>";
$login=false;
}elseif($acti!=2){
echo "<div id='error2'>Nincs megerősítve regisztrációd</div>";
$login=false;
}
if($login){
$_SESSION['name']=$name;
$_SESSION['login']=true;
?><script>window.location=window.location;</script><?php
}
}
}
?>
<form method="POST">
<input type="text" name="name" placeholder="Felhasználónév" />
<input type="password" name="pass" placeholder="Jelszó" />
<p><input type="submit" name="login" value="Belépek" id="submit" /></p>
<p><a href="register.php">Regisztráció</a><br />
<a href="forgottpass.php">Elfelejtett jelszó</a></p>
</form>
$pass
$pass
sose lesz üres, ergo a hozzá kapcsolódó hibaüzenet sose fog megjelenni? Valamint jó lenne, ha az$acti
értékének valami értéket adnál a lekérdezés előtt, csak hogy elkerüljük aregister_globals
bekapcsolása esetén felmerülő biztonsági rést. JavaScripttel ne irányítsuk át a felhasználót, használjunk megfelelőhearder
utasítást. Valamint biztosan ennyiből áll a kód? Nem lehet, hogy valamit kihagytál az elején vagy a végén?1. Köszi, hogy mondtad a
2. Azért irányítok át JS-el, mert a header-rel mindig csak a bajvan, 10-ből 8-szor hibát kapok rá vissza. :D
3. Igen ennyi a kód.
2
Output header előtt
Nincs semmi hiba kód, mert
$pass
Ennek így mi értelme?
Az md5 (bocs, nem néztem utána, de gondolom, ez beépített PHP függvény) egy hexadecimális stringet ad vissza, abban tutira nem lesz mit escape-elni. Valamit rosszul tudok?
Az md5() függvény egy 32
Közelítőleg
Returns the hash as a 32-character hexadecimal number.
Részben igaz: a visszaadott érték numerikus, valamint a-f tartományba tartozó karaktereket tartalmazhat.
De még ha a te variációd lenne igaz, akkor is feleslegesnek tűnik az escape-elés.
szerintem írasd ki a 18.