MySQL PHP kullanarak basit şifreleme tekniği

5 Cevap php

Nasıl bir kullanıcı şifresini şifrelemek yok PHP?

Bir acemi anlayabileceği bir şekilde açıklayınız. Ben zaten bu örnek kod var:

$password = "john856";
$encrypt_password = md5($password);

echo $encrypt_password;

Nasıl herhangi bir şifreleme yapmaz ki, benim geçerli kod bunu dahil edersiniz?

<?php
    $con = mysql_connect("localhost","root","");

    if (!$con) { die('Could not connect: ' . mysql_error()); }

    mysql_select_db("koro", $con);

    $sql="INSERT INTO users
            (LNAME, FNAME, MNAME, UNAME, PW)
          VALUES
            ('$_POST[Lneym]', '$_POST[Fneym]', '$_POST[Mneym]', '$_POST[Uneym]', '$_POST[Pass]')";

    if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); }

    echo "<script>alert('User added! You can now use the system.')</script>";

    mysql_close($con)
?>

5 Cevap

Bana daha önemli bir nokta ile başlayalım:

Sen never, doğrudan sorgu içine $ _POST değişkenler geçmelidir. Bu SQL injections karşı son derece savunmasız hale getirir.

Sen en azından az mysql_real_escape_string() eklemek her bir form değeri üzerinde çalışmalıdır:

$Lneym = $_POST["Lneym"];
$Lneym_halfway_safe = mysql_real_escape_string($Lneym);

....

$sql="INSERT INTO users 
          (LNAME, FNAME, MNAME, UNAME, PW)
        VALUES 
          ('$Lneym_halfway_safe', 

Daha sonra da hemen () md5 dahil edebilirsiniz:

$PW = md5($_POST["PW"]);  // no escape_string() needed here, 
                          // the md5 checksum is safe

ve ardından '$PW' şifre alanına için yerleştirin.

En iyi şey, PDO gibi bir veritabanı sınıfını kullanarak olacaktır. Onun parametrized sorgular otomatik özelliği, SQL enjeksiyonu önlemeye yardımcı olur. Belki this tutorial size yardımcı olur.

Hatta ben şiddetle programlama temelleri üzerinde okumanızı öneririz (hepimiz bir kez orada başladı, hiçbir kişisel eleştiri) kodunuz için md5() eklemeniz mümkün değil gibi görüyorum. Bir web platformu için Kopyala-yapıştırma önemli güvenlik özellikleri korkunç tehlikeli ve gözyaşları içinde bitmesi muhtemeldir.

Bu pratik vardır. Kodunuzu çalıştırın:

$password=$_POST["pass"];
$encrypt_password=md5($password);

ve daha sonra veritabanı şifre alanına $ encrypt_password eklemek:

$sql="INSERT INTO users 
          (LNAME, FNAME, MNAME, UNAME, PW)
        VALUES 
          ('$_POST[Lneym]', '$_POST[Fneym]', '$_POST[Mneym]', '$_POST[Uneym]', '$encrypt_password')"; 

Ben MD5 her girişte benzersiz bir dize ("kenara çarpışmalar") üreten tek yönlü bir süreçtir, bir karma algoritma olduğunu, ancak, eklemek gerekir. Sen bilirsin sadece bu yüzden, kullanıcının parolasını kurtarmak mümkün olmayacaktır. Ancak bu iyi bir şey olduğunu ve hala giriş kontrol edebilirsiniz - sadece md5 değerleri karşılaştırın.

Diğerleri söylediler, tüm değişkenleri kaçış:

$encrypt_password = mysql_real_escape_string(md5($_POST["pass"]));
$lastname = mysql_real_escape_string($_POST[Lneym]);
$firstname = mysql_real_escape_string($_POST[Fneym]);
$midname = mysql_real_escape_string($_POST[Mneym]);
$username = mysql_real_escape_string($_POST[Uneym]);
$sql = "INSERT INTO users
          (LNAME, FNAME, MNAME, UNAME, PW)
          VALUES
          ('$lastname', '$fistname', '$middlename', '$username', '$encrypt_password')";

Sonra giriş için:

$encrypt_password = mysql_real_escape_string(md5($_POST["pass"]))
$username = mysql_real_escape_string($_POST[Uneym]);
$sql = "SELECT LNAME, FNAME, MNAME, UNAME
        WHERE UNAME = '$username'
        AND PW = '$encrypt_password'";

Bildiğim kadarıyla kullanan SHA-2 Daha iyi MD5 daha (daha güvenli) bir yol hatta SHA-1 şifreleri karma etmektir.

Bir süre önce benim CMS için bu sayfayı öğretici kullanılır, ve gerçekten iyi çalışıyor.

http://hungred.com/useful-information/php-better-hashing-password/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+Hungredcom+%28Hungred.com%29

Bu şifreleri güvenliğini sağlamak için özel bir işlevi birleştirmek için çalışıyor çünkü güzel, kodlu ve kullanımı yeterince güvenli oluyor.