Простая техника шифрования для MySQL с использованием PHP - PullRequest
2 голосов
/ 24 января 2010

Как зашифровать пароль пользователя в PHP ?

Пожалуйста, объясните, как новичок может понять. У меня уже есть этот пример кода:

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

echo $encrypt_password;

Как включить его в мой текущий код, который не выполняет шифрование?

<?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 ]

3 голосов
/ 24 января 2010

Позвольте мне начать с более важного вопроса:

Вы должны никогда передавать переменные $ _POST непосредственно в запрос. Это делает вас чрезвычайно уязвимыми для SQL-инъекций .

Вы должны как минимум запустить mysql_real_escape_string () для каждого вставляемого значения формы:

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

....

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

Вы также можете сразу включить md5 ():

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

и затем введите '$PW' в поле пароля.

Лучше всего использовать класс базы данных, такой как PDO . Функция параметризованных запросов автоматически помогает предотвратить SQL-инъекции. Возможно этот урок поможет вам.

Поскольку вы даже не можете добавить md5() в свой код (без личной критики, мы все начинали там один раз), я настоятельно рекомендую вам ознакомиться с основами программирования. Вставка копий важных функций безопасности для веб-платформы ужасно опасна и может закончиться слезами.

1 голос
/ 24 января 2010

Вы практически там. Запустите ваш код:

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

и затем введите $ encrypt_password в поле пароля в базе данных:

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

Я должен добавить, однако, что MD5 - это алгоритм хеширования, который является односторонним процессом, который генерирует уникальную строку на каждом входе («в стороне от коллизий»). Вы не сможете восстановить пароль пользователя, просто чтобы вы знали. Это, однако, хорошо, и вы все равно можете проверить логины - просто сравните значения md5.

0 голосов
/ 24 января 2010

Насколько я знаю, SHA-2 - лучший (более безопасный) способ, чем MD5 или даже SHA-1 для хэширования ваших паролей.

Некоторое время назад я использовал этот учебник для моей CMS , и он работает очень хорошо.

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

Он довольно закодирован и достаточно безопасен для использования, потому что он пытается объединить частную функцию для защиты паролей.

0 голосов
/ 24 января 2010

Как уже говорили другие, избегайте всех переменных:

$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')";

Тогда для входа в систему:

$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'";
0 голосов
/ 24 января 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...