Раньше мы использовали пароли, хранящиеся в md5, а затем $userId_$md5password
в файлах cookie для проверки пользователя, вошедшего в систему ... это была крайне плохая защита, поэтому пришло время изменить ее.
Система представляет собой VPS, поэтому я не думаю, что кто-либо другой может получить доступ к переменным сеанса, базе данных или файловой системе.Страницы входа и регистрации используют ssl для отправки данных.
После регистрации пароли пользователей теперь crypt
редактируются таким образом перед отправкой в базу данных:
$salt = to64(getRandomBytes(16));
if (CRYPT_BLOWFISH == 1)
$securePassword = crypt($password, '$2a$10$'.$salt);
Сессии сейчасиспользуется вместо авторизации в виде открытого файла cookie, а файл php.ini включает в себя:
session.use_trans_sid = 0
session.use_only_cookies = 1
session.hash_function = sha512
session.hash_bits_per_character = 5
Сеансы запускаются и настраиваются следующим образом, гарантируя, что в сеансе не будут храниться защищенные данные:
session_set_cookie_params("86400", "/");
session_name("auth");
session_start();
$_SESSION['userId'] = $row[0];
$_SESSION['created'] = time();
СессияИдентификаторы обновляются каждые 30 минут, поэтому система продолжает вращаться:
if($_SESSION['created'] + 30 * 60 < time())
{
session_regenerate_id ();
$_SESSION['created'] = time();
}
Срок действия сессий истекает через 24 часа, если пользователь не использует сайт снова в течение этого времени, это слишком большая суммавремени?
Мы также можем добавить проверки сессий ip / http user agent к сеансам, но на данный момент я думаю, что все в порядке, поскольку идентификатор не может быть подделан?
Я пропустил какие-либовопиющие дыры в безопасности?
Я также укажу, что эта система будет работать вместе с openid, и наши серверы не будут хранить такие данные, как кредитные карты, просто электронные письма, имя пользователяи био информации, а не то, что имеет значение в защите данных.