2011-12-17 2 views
6

Я создал систему входа в систему с использованием сеансов PHP.Безопасен ли этот сеанс входа в систему?

Вот как это работает:

1.), когда пользователь входит в систему (с действительной информацией авторизации): Их информация (username и password) хранятся в сессии, наряду с несколькими другими битами info: The Expire time: Это всего лишь 5 минут добавлено в текущее время (так что если вход пользователя в 22:30, время истечения будет 22:35).

2.) На каждом просмотре страницы пользователя, входящего в систему: Сессия проверяется, существует ли она. Если это не так, пользователь перенаправляется на страницу входа в систему. Если сеанс действительно существует, он затем проверяет expire time и сравнивает его с current time. Если expire time больше, чем current time (пользователь неактивен на 5+ минут), то их данные пользователя (в сеансе) проверяются (по сравнению с данными в базе данных), а сеанс Expiretime обновляется, но если expire time меньше затем current time, он не будет проверять какие-либо детали, обновляет сеанс expire time и позволит пользователю продолжать. Ive сделал это, чтобы предотвратить постоянный запрос в БД для экономии пропускной способности.

Так что, как только пользователь успешно выполнит вход в систему, их имя пользователя и пароль не будут проверены на БД еще до того, как они либо станут неактивными (останутся на одной странице) в течение 5+ минут, либо если они выйдут из системы.

Забыла упомянуть что-то ребята: Срок истекает время сеанса на самом деле называется expire_time_unique_characters ($_SESSION['expire_time_'.$unique_nu]), что означает, что злой человек также должен найти $unique_nu когда притворяется сеанс ...

Я просто это ощущение, что оно не очень безопасно.

Кроме того, проект это для является открытым исходным кодом (люди могут видеть исходный код), так что создает еще более высокий риск здесь ...

вы, ребята, дайте мне некоторую обратную связь?

Благодаря

+0

Зачем хранить комбинацию пользователя/пароля на сервере в открытом виде? Как _that_ должен улучшить безопасность? Если пользователь/пароль был ошибочным, чем не было установлено в первый раз, правильно? –

+0

@Niklas Сессия будет создана только после успешного завершения входа в систему. –

+0

Затем вам не нужно повторно проверять комбинацию входа каждые несколько минут. Просто не храните имя пользователя и пароль на сервере. Кроме того, не храните их в базе данных! Используйте сильный алгоритм хэширования для этого (желательно с растяжением ключа) –

ответ

0

$_SESSION является относительно безопасным, если она используется правильно. Например, если вы держите файлы сеанса ниже корня веб-узла, к ним нельзя получить доступ, кроме как у кого-то, у кого есть прямой доступ к самой файловой системе сервера. По этой причине вы все равно хотите, чтобы пароль был зашифрован, но имя пользователя в обычном тексте отлично.

Сохраните идентификатор сеанса в cookie, а не используя метод строки запроса, иначе любой, кто скопирует URL-адрес, случайно поделится своим сеансом и обойдется логином.

Это должно быть сделано. Очевидно, что если кто-то взламывает сеть пользователя и получает данные cookie, то они могут использовать его, чтобы притворяться пользователем, но вы почти ничего не можете с этим поделать. Вы можете сделать это сложнее (требуется, например, строка User Agent, например), но в конечном итоге вы не можете сделать это, если сеть пользователя скомпрометирована. Вы не обязаны защищать свою сеть, а только свои данные на вашем сервере.

+0

Стоит отметить, что https исправит ситуацию с файлом cookie (хотя это выходит за рамки вопроса, и https все равно будут иметь проблемы). – Corbin

+0

Я забыл также упомянуть что-то в этом вопросе. Можете ли вы проверить мое редактирование, пожалуйста? –

+0

Не имеет значения. Доступ к '$ _SESSION' поддерживается файлом cookie' PHPSESSID' (имя по умолчанию), заданным браузером. –

2

Сохранение идентификатора пользователя в сеансе более чем достаточно.

Тем не менее, вы должны реализовать какую-либо защиту от фиксации/захвата сеанса.