Mysql dan şifreli şifre seçmek için

3 Cevap

Ben formda günlüğü aracılığıyla girilen belirli bir kullanıcı adı ile tablodan sadece şifre seçmek gerekir. Ben mysql tabloda şifrelenmiş formda parolayı saklayın. Yani verilen şifre ve depolanmış parolayı karşılaştırmak gerekir ve "Başarıyla giriş" yazdırmak zorunda. Başka şifre hatalı. bu benim code.Now elimden herhangi bir plz yardım. "1Resource id # 4" olarak çıktı alıyorum olduğunu ...

mysql_select_db($dbName);
$user_name=$_POST['name'];
$pswd=$_POST['pswd'];
$res    	= mysql_query("select * from xxx where Name='$user_name'");
$row    	= mysql_num_rows($res);
echo $row;
$encpass=mysql_query("SELECT password FROM xxx WHERE Name = '$user_name'");
$result1= mysql_fetch_array($encpass);
echo $result1;
if($row>0)
{
//echo 'hi';
   if(md5($pswd)==$result1)
       {
         echo 'hi';
         echo "you have successfully signed in!!!";
         //echo $name   =	$row['Name'];
         //header("location:check.html");
       }
}

else
echo "you are not a member";

3 Cevap

Bu komplike bitti. Sen veritabanından şifreleri almak gerekmez. Sen sadece sunuldu kullanıcı adı ve parolaya sahip bir satır seçebilirsiniz olmadığını görmek gerekir.

İlk - kullanıcı adı ve şifre almak ve onları bunu sakladığınız ancak eşleşen şeklinde olsun.

$username = $_POST['name'];
$password = my_password_encryption_function( $_POST['pswd'] );

İkincisi - SQL kurmak. SQL enjeksiyon saldırılarına karşı korumak için hazırlanmış bir deyimini kullanın. Geçerli yaklaşım güvensiz ve kullanıcılar (diğer şeyler arasında) arbitary kullanıcıların parolalarını değiştirmek için izin verir.

$preparedStatement = $db->prepare('SELECT * FROM xxx WHERE Name = :name AND password = :password');
$preparedStatement->execute(array(':name' => $username, ':password' => $password));
$rows = $preparedStatement->fetchAll();

Üçüncü - sadece satırlar döndü sayılır. Eğer bir sonuç alırsanız, şifre eşleşti. Eğer sıfır sonuç alırsanız, şifre eşleşmiyor.

Sen bir dizi olarak resultset yazdırırken, sen hala hareket ettirmek zorunda.

Sadece değiştirmek:

if(md5($pswd)==$result1)

Için:

if(md5($pswd)==$result1[0])

Yanı sıra slipbull ne dediğini söylüyorum gibi - "Sen bir dizi olarak resultset yazdırırken, sen hala hareket ettirmek zorunda." - Ben de senin kodu VERY tehlikeli şu anda olduğunu anlatacağım.

Sen düz SQL sorgusunun içine kullanıcının iletilen verileri yapıştırıyoruz. Onlar yaparak veritabanı üzerinden alabilir.

Bunun yerine, veri ile bir şey yapıyor ÖNCE mysql_real_escape_string() ile parametresini geçirin.

Fix this before you do ANYTHING else!!