2011-01-26 2 views
0

Я использовал учебник здесь: http://www.phpeasystep.com/phptu/26.html, чтобы создать форму для входа на мой сайт. Я установил поле uPassword в моей базе данных как md5, и все пароли в базе данных зашифрованы с помощью md5.PHP MD5 Создать пользовательскую форму

Вход в систему работает отлично, однако я немного запутался в создании регистрационной формы.

Форма запрашивает у пользователя ввод желаемого пароля. Я немного смущен относительно того, как я возьму пароль, который пользователь вводит, преобразует его в md5, а затем вводит пароль md5 в поле uPassword в таблице пользователя.

Ниже приведен код, который я для файла processresgistration.php:

/* Database connection info*/ 
mysql_select_db("dbname", $con); 

$encryptedpassword = md5($_POST['uPassword']); 

md5($uPassword); 

$sql="INSERT INTO users (uName, uPassword, uSurname, uFirstName) 
VALUES 
('$_POST[uName]','$encryptedpassword','$_POST[uSurname]','$_POST[uFirstName]'"; 

if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "Account created. You can now login"; 

mysql_close($con) 
?> 

Код выше предполагается:

  • Создайте переменную с именем encryptedpassword
  • Использование uPassword в encryptedpassword
  • Преобразование зашифрованного пароля в MD5
  • Ввод MD 5 пароль в таблицу пользователей как uPassword

Я уверен, что я где-то не использовал правильную переменную, или я сделал простую ошибку с моим синтаксисом; любые комментарии/помощь приветствуются!

Спасибо, Chris M

+0

Получаете ли вы какие-либо выход? В первой строке есть ошибка, добавьте трейлинг/в первую строку ... – powtac

+0

Предотвращение SQL-инъекций http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in- php – acm

+1

Wow, _two_ слабости (md5 _and_ unsalted password hash!) и _three_ удаленно доступный [SQL Injection] (http: //en.wikipedia.org/wiki/SQL_injection) в примерно девяти строках кода. Это должно быть какая-то запись. Я надеюсь. :) – sarnold

ответ

0

Вы код требует некоторой проверки & ускользающей , более:

<?php 

/* Database connection info */ 
mysql_select_db("dbname", $con); 

if ($_REQUEST['METHOD'] == 'POST') { 
    $uName = filter_input(INPUT_POST, 'uName'); 
    $uPassword = filter_input(INPUT_POST, 'uPassword'); 
    $uSurname = filter_input(INPUT_POST, 'uSurname'); 
    $uFirstName = filter_input(INPUT_POST, 'uFirstName'); 

    // do some validation here ... 

    // if everything OK, then crypte the password 
    $hashedPassword = md5($uPassword); 

    // and store it 

    $sql = sprintf(
     'INSERT INTO users (uName, hashedPassword, uSurname, uFirstName) 
     VALUES (%s, %s, %s, %s);', 
      mysql_real_escape_string($uName, $con), 
      mysql_real_escape_string($hashedPassword, $con), 
      mysql_real_escape_string($uSurname, $con), 
      mysql_real_escape_string($uFirstName, $con) 
    ); 

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

    mysql_close($con); 
    echo "Account created. You can now login"; 
} 

?> 

Теперь для входа

<?php 

if ($_REQUEST['METHOD'] == 'POST') { 
    $uName = filter_input(INPUT_POST, 'uName'); 
    $uPassword = filter_input(INPUT_POST, 'uPassword'); 
    $hashedPassword = md5($uPassword); 

    $sql = sprintf(
     'SELECT * FROM users WHERE uName = "%s" AND hashedPassword = "%s" LIMIT 1', 
      mysql_real_escape_string($uName, $con), 
      mysql_real_escape_string($hashedPassword, $con), 
     ); 

    // etc etc ... 
} 
?> 
+1

. Я бы предложил добавить пароль для этого кода, просто используя атрибуты другого пользователя. и, конечно, 'trigger_error' вместо того, чтобы умереть –

0
/* Database connection info* 

Вы не правильно закрыть свой комментарий там. Добавьте / в конец строки.

О, и MD5 небезопасен. Вместо этого используйте SHA1. Или еще лучше, используйте соленый SHA1.

Вам также необходимо запустить экранирование всех пользовательских вводных данных, которые вы помещаете в свою базу данных, используя mysql_real_escape_string() или Little Bobby Tables будет очень весело с вашей базой данных.

+0

ничего плохого с MD5 и «избежать всех пользовательских ввода» - это глупость. и увлечение бобби с помощью PHP-библиотеки mysql очень ограничено. –

+0

, конечно, ему нужно избежать ввода пользователем ... – ThiefMaster

+1

Выход из пользовательского ввода - это вздор. следует избегать «всего» «ввода», но * строковых литералов *, идущих в * query *. Пункт назначения имеет значение, а не источник. –

0

/* Подключение к базе данных информация */

mysql_select_db("dbname", $con); 

$encryptedpassword = md5($_POST['uPassword']); 

$sql="INSERT INTO users (uName, uPassword, uSurname, uFirstName) 
VALUES 
('$_POST[uName]','$encryptedpassword','$_POST[uSurname]','$_POST[uFirstName]')"; 

if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "Account created. You can now login"; 

mysql_close($con) 
?> 

Закрытие кронштейна проблема в запросе

('$_POST[uName]','$encryptedpassword','$_POST[uSurname]','$_POST[uFirstName]'"; 

Это требует закрытия ') '

+0

'md5 ($ uPassword);' - эта строка бесполезна – ThiefMaster

+0

Я просто попробовал его показать отсутствующие скобки в своем коде. okey удален – Harish

Смежные вопросы