Сигурен метод за оторизация в PHP

1. Модел (клиент)

Регистрация - вход (a-z0-9) - парола Вход - вход - парола Бисквитка - уникален потребителски идентификатор - хеш

Модел (сървър) MySQL

Потребители на масата ________________________________________________

user_id (int(11)) user_login (Varchar(30)) user_password (varchar(32)) user_hash (varchar(32)) user_ip (int(10)) по подразбиране 0 ____________________________________________

Защо е необходимо да се съхранява хеш на произволно генериран низ в бисквитка, а не хеш на паролата?

__________________________________________________________ -- — Структура на таблицата `потребители` — СЪЗДАВАНЕ НА ТАБЛИЦА `потребители` ( ​​ `user_id` int(11) unsigned NOT NULL auto_increment, `user_login` varchar(30) NOT NULL, `user_password` varchar(32) NOT NULL, `user_ha sh` varchar(32) NOT NULL, `user_ip` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ; ________________________________________________________________

__________________________________________________________ // Страница за регистрация на нов потребител

# Свързване към базата данни mysql_connect("localhost", "myhost", "myhost"); mysql_select_db("тестова таблица");

# проверка на вход if(!preg_match("/^[a-zA-Z0-9]+$/",$_POST['login'])) $err[] = "Входът може да съдържа само английски букви и цифри"; >

if(strlen($_POST['login']) 30) $err[] = "Входът трябва да съдържа поне 3 знака и не повече от 30"; >

# проверка дали има потребител със същото име $query = mysql_query("SELECT COUNT(user_id) FROM users WHEREuser_login='".mysql_real_escape_string($_POST['login'])."'"); if(mysql_result($query, 0) > 0) $err[] = "Потребител с това име за влизане вече съществува в базата данни"; >

# Ако няма грешки, добавете нов потребител към базата данни if(count($err) == 0)

# Премахнете излишните интервали и направете двойно криптиране $password = md5(md5(trim($_POST['password'])));

mysql_query("INSERT INTO потребители SET user_login='".$login."', user_password='".$password."'"); header("Местоположение: login.php"); изход(); > else print "По време на регистрацията възникнаха следните грешки: "; foreach($err AS $error) print $error." "; > > > ________________________________________________________________

# Функция за генериране на случаен низ function generateCode($length=6) $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789"; $code = ""; $clen = strlen($chars) - 1; докато (strlen($code)