Mi a hiba ebben a php scriptben?
Nos...nem varom el, hogy itt kezdjetek keresgelni a hibat...de aki jobban erti mint en...az hamar rajon. Nem tudok rajonni, egyszeruen hiaba irok be rossz felhasznalonevet ugy is beenged. Roviden...mindegy mit irok be, ugy is be tudok lepni. :(. Ha nem irok az inputba semmit akkor kiirja az altalam irt "error" uzenetet.
---------------------------------
<?php
$error='';
if(isset($_POST['submit'])){
if(empty($_POST['user']) || empty($_POST['pass'])){
$error="Hibas felhasznalonev vagy jelszo!";
}
else{
$user =$_POST['user'];
$pass =$_POST['pass'];
//$db_host = 'localhost';
$db_host = 'localhost';
$db_user = 'root';
$db_pass = '';
$db_name = 'test';
$connect = new mysqli($db_host,$db_user,$db_pass,$db_name);
$db = mysqli_select_db($connect,$db_name);
$query = mysql_query($connect,"
SELECT * FROM admin WHERE user={'$user'} AND password ={'$pass'}
");
$rows = mysql_num_rows($query);
if($rows == 1){
header("Location: admin/welcome.php");
}
else{
$error="Hibas felhasznalonev vagy jelszo!";
}
}
}
?>
Elore is koszonom a valaszokat.
1. mysqli-t kezdesz használni - ráadásul objektum-orientált stílusban - majd a lekérdezést már mysql-lel hajtod végre procedurálisan. De a legszebb lenne, ha PDO-t használnál.
2. Nem használsz mysqli_real_escape_string-et. Így SQL-injection révén máris támadható az adatbázisod.
3. Jelszót SOSEM tárolunk adatbázisban. Maximum az ellenorzóösszeget.
4. Az admin/welcome.php miből fogja tudni, hogy nem-e illetéktelen jutott be? Sikeres bejelentkezéskor létre kellene hozni egy munkamenetet, és a welcome.php-ban ellenőrizni annak meglétét.
#1 Javitottam, de 2 hibat kaptam cserebe.
#2 Fu...csak most kezdtem tanulni a php-t vagy 1 napja :D. Tudom :) de most egyenlore ilyen formaban csinalom. Meg van egy rengetek fugveny amit nem hasznaltam...pl van egy ilyen html fugveny is ha minden igaz , hogy ne lehessen :)-kat irogatni benne stb. Hidd el rengetek kodot olvastam, peldaprogramot oldottam meg...de valahogy ennel a resznel elakadtam. Nem tudom, hogy erted...jelszot nem tarolunk adatbazisban ? En letrehoztam egy felhasznalonevet amivel be tudok lepni a jelszot md5-el lattam el...de ennek mi a lenyege...,hogyha valaki megnezni akkor ne tudja...de en egy oldalon ki probaltam bemasoltam es kiirta a jelszot ?
Negyedik kerdesedre a valasz...meg nem tartok ott, nincs akkora tudasom.
(Ez nem azt jelenti, hogy 1 honap mulva elesben fogom serveren futtatni addig tanulom amig nem megy...ha ugy erzem egyedul nem megy akkor keresek tanfolyamot)
Koszonom szepen, hogy irtatok.
1,ha mysqli-t használsz,akkor mindenhol azt használd!
2,$db = mysqli_select_db($connect,$db_name); felesleges
3,$query = mysql_query($connect,"
SELECT * FROM admin WHERE user={'$user'} AND password ={'$pass'}
"); // az 1-es pontban leírton kívűl jobb,ha $res = .. vagy $result változónévvel illeted,mert ez eredmény,nem pedig lekérdező string.
#5
Én is így kezdtem 5éve, hogy login rendszer. Mert egy újoncnak ezt jelenti a kihívást, és ha sikerült, akkor érti is.
Ez is egy feladat, mint egy alap algoritmust megírni. Meg amúgy is: valami célnak kell lennie.
DE! Legalább egy ember aki úgy tanul, hogy doksit olvas. Ritka ez itt gyíkon. :3
Akkor pár javaslat!
- MD5, SHA1-et jelszó hash-elésre nem használunk. Nem azért mert nem működik, hanem mert szivárványtáblával kideríthető az eredeti jelszó.
Inkább sózzál:
Jelszó összehasonlítás annyit takar, hogy egy titkosított valami szöveget mentesz le a DB-be, és ha bejön loginkor egy jelszó (lehasheled), akkor összehasonlítod a tárolttal. Ehhez a 3. link fog kelleni.
- mysql_ és mysqli_ függvényeket addig használd, míg meg nem ismerkedsz az OOP-vel. Akkor ismerkedj össze a PDO-val, és térj is át rá. (OOP-vel jobban meg is érted)
#4 Koszonom :D celszerubb 1 fajtat hasznalni :D
#5 #6-os leirtad...amugy igen ki akartam magam probalni mit tudok...hat lathatod magad is :D semmit :(
#7 Oh...szoval akkor igy tortenik a jelszavas dolog. De olvastam egy olyant is, hogy van valami "hack szotar" lehet rosszul irom. A lenyeg az, hogy python-al vagy C++al irt alkalmazas aminek a celja egy txt-bol olvassa be a jelszavakat, hogyha talal egyezest akkor meg van a jelszo...minnel tobb jelszo van annal jobb lattam van 5-10Gb-os is. Szoval ha minden igaz akkor ez probalgassa. Gondolom valamit a mysql-el kell babralni, hogyha tul sok lekerdezes tortenik akkor dobja le ? Ezt meg nem vagom olyan jol...
Koszonom szepen mindenkinek a segitseget!.
Rosszul értelmezed a szivárványtáblát.
Ez nem azt csinálja, hogy próbálgatja a jelszót, hanem maga a jelszó hash kell ahhoz, hogy társíts hozzá jelszót.
Ezért is jó a sózás, mivel ha 10x lefuttatod ugyanarra a jelszóra 10x más eredményt kapsz. Ezért kell külön ellenőrző algoritmus (3. link), mert ha első és majd később a loginkor kapott jelszót is átfuttatod a hashelésen (2. link), akkor az nem egyenlő.
Végig próbálgatni rengeteg kombinációt az hosszadalmas és nem éri meg. Aki támadni szeretne, az nem így közelíti meg.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!