Настраиваемая «безопасная» система входа в систему php и MySQL. - PullRequest
0 голосов
/ 18 января 2012

Раньше мы использовали пароли, хранящиеся в 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, и наши серверы не будут хранить такие данные, как кредитные карты, просто электронные письма, имя пользователяи био информации, а не то, что имеет значение в защите данных.

1 Ответ

1 голос
/ 18 января 2012

Вы написали "Страницы входа и регистрации используют ssl", означает ли это, что вы переключаетесь на HTTP для других страниц?В этом случае файл cookie сеанса будет отправлен в виде открытого текста для других страниц (или даже для запроса изображения).

Вы можете убедиться, что файл cookie сеанса отправляется только на страницы HTTPS, но вы потеряетесеанс для страниц HTTP:

session_set_cookie_params('86400', '/', '', true, true);

Обратите внимание на первый true, это означает, что cookie будет отправляться только на страницы HTTPS.Второе значение указывает браузеру, что JavaScript не должен получать доступ к куки-файлу сеанса (зависит от браузера, если это сделано правильно).

Я бы предложил одно из следующих решений:

  1. Используйте HTTPS для всего сайта, это самый простой и безопасный способ.
  2. Разделите две задачи, поддерживая сеанс и аутентификацию.В этой статье показано, как можно безопасно переключаться между HTTP и HTTPS .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...