Авторизация (php mysql) и запомняне на потребители - Форум на програмистите

1. DB таблица с потребители
Ще използваме много кратка версия. Структурата ще бъде:
id smallint(8) unsigned NOT NULL auto_increment, login varchar(50) NOT NULL default '', password varchar(32) NOT NULL default ''
Размерът на полето за парола е 32 знака. защото в него трябва да съхраняваме хеша на паролата, а не самата парола в чист вид.
2. Упълномощаване и влизане на потребител Първо ще начертаем формуляр, който ще позволи на потребителя да ни изпрати своето потребителско име и парола.
След като потребителят въведе данни, ние проверяваме неговото име и парола.
Тъй като се съгласихме да не съхраняваме паролата в чист вид, ще зададем хеша на въведената парола с това, което се съхранява в нашата база данни.
// направете заявка към базата данни // и потърсете потребител със същото име и парола
$query = "SELECT `id` FROM `users` WHERE `login`='' И `password`='' LIMIT 1"; $sql = mysql_query($query) или die(mysql_error());
// ако е намерен такъв потребител if (mysql_num_rows($sql) == 1) // тогава поставяме етикет за това в сесията (да речем, че поставяме потребителския идентификатор)
$row = mysql_fetch_assoc($sql); $_SESSION['user_];
4. Как да внедря "запомни ме на този компютър"?
Тук в допълнение към сесиите ще използваме бисквитки. Със сигурност трябва да прочетете за бисквитките в нашите ЧЗВ.
// направете заявка към базата данни // и потърсете потребител със същото име и парола
$query = "SELECT `id` FROM `users` WHERE `login`='' И `password`='' LIMIT 1"; $sql = mysql_query($query) или die(mysql_error());
// ако се намери такъв потребител if (mysql_num_rows($sql) == 1) // тогава маркираме това в сесията(да кажем, че ще поставим потребителския идентификатор)
$row = mysql_fetch_assoc($sql); $_SESSION['user_];
Сол в паролата или как да усложним живота на хакера Паролата може да се познае по нейния хеш, като се знае алгоритъма за хеширане. Има много бази данни, където паролите се съпоставят с техните хешове.
Следователно, с просто движение на ръката, можем леко да усложним задачата за хората, които ще отгатнат паролата по нейния хеш. Можете да вземете двоен хеш (например md5(sha1('password'))) или да използвате така наречената "сол" (сол). Пример за използване на сол: md5(md5('password'). 'secret_code'); някакъв набор от знаци (също е желателно да запомните кой знак комплект, който добавяме).
И така, за този метод за съхранение на пароли ще променим леко таблицата на базата данни с потребителите:
id smallint(8) unsigned NOT NULL auto_increment, login varchar(50) NOT NULL default '', парола varchar(32) NOT NULL default '', salt varchar(3) NOT NULL default ''
Тук ще използваме сол с 3 знака.
За всяка потребителска парола (когато я регистрираме) ще генерираме собствена сол и ще я запишем в базата данни до паролата, за да я използваме при хеширане.
Разгледайте пример: - регистрираме потребителя: md5 с парола парола и сол 8f* - получаваме неговия хеш с помощта на md5(md5('password') . '8f*') - записваме потребителя в таблицата, получаваме: , нека променим малко нашия код:
// от деня на началото, извлечете от таблицата с потребителите солта за въведеното име $login = mysql_real_escape_string($_POST['login']);
$query = "SELECT `salt` FROM `users` WHERE `login`='' ГРАНИЦА 1"; $sql = mysql_query($query) или die(mysql_error());
if (mysql_num_rows($sql) == 1) $row = mysql_fetch_assoc($sql);
// така че, ето солта, съответстваща на това влизане: $salt = $row['salt'];
// сега правилно хеширайте въведената парола и повторете стъпките по-горе: $password = md5(md5($_POST['password']) . $salt);