Лучшая практика для функциональности «помни меня»? - PullRequest
9 голосов
/ 12 мая 2011

В рамках более крупного проекта, над которым я работаю, мы стремимся интегрировать функцию «запомнить меня» в процессе входа пользователя.Одно из предложений от ведущего разработчика состояло в том, чтобы просто сохранить их PHP session_id () в cookie и в их записи в базе данных.Когда они в следующий раз зайдут на сайт, найдите session_id из файла cookie и получите их учетные данные.

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

Я склонен предложить команде создать отдельную базу данных.таблица, которая имеет следующую структуру:

+----------------+----------------+------------------+--------------------+
|    user_id     |   session_id   |    ip_address    | initial_login_date |
+----------------+----------------+------------------+--------------------+
|       5        |  123456789101  |   192.168.0.1    |     1305194639     |
+----------------+----------------+------------------+--------------------+
|       5        |  021456789101  | 255.255.255.255  |     1305194639     |
+----------------+----------------+------------------+--------------------+

Все, что нам нужно сделать, это найти их идентификатор_ сеанса в таблице и извлечь идентификатор_пользователя.

Есть ли лучший способ добиться этого

Ответы [ 5 ]

5 голосов
/ 12 мая 2011

Эта статья мне очень помогла

2 голосов
/ 12 мая 2011

Прежде всего: вам нужно знать, что наличие такой функции создает гораздо большее временное окно для злоумышленника, чем обычные сеансы. Потому что сессии скорее должны быть короткими (несколько минут / часов), в то время как такая функция Запомнить меня обычно действует в течение длительного времени (несколько дней, недель или даже месяцев).

Атака на это была бы аналогична атакам сеанса, когда злоумышленник стремится к действительному идентификатору, который используется не только для идентификации, но и для аутентификации. Вот почему вы должны подумать, должны ли запомненный пользователь иметь другие привилегии, чем пользователь, прошедший регулярную аутентификацию.

Если вы хотите реализовать такую ​​функцию, не используйте исходные учетные данные для аутентификации, а используйте случайный и уникальный токен для идентификации пользователя и компьютера и сохранения его на сервере. Вы также должны убедиться, что пользователь контролирует все сеансы входа в систему и запомнить меня токенов, чтобы он / она мог отозвать такие сеансы / запомнить меня токенов при необходимости.

2 голосов
/ 12 мая 2011

Я бы хотел сохранить уникальный идентификатор в файле cookie и использовать его вместо ip, так как он может быть изменен.

1 голос
/ 12 мая 2011

Нет ничего плохого в хранении нескольких постоянных идентификаторов сеансов для пользователя на компьютер.Возможно, будет лучше, если вы сохраните «последнюю активную временную метку», чтобы запретить одновременное использование одной и той же учетной записи с разных компьютеров.

Всегда используйте специальный флаг для постоянных входов в систему с использованием cookie и запрашивайте реальный вход в систему для важных функций,например, изменение паролей и т. д.

Кроме того, обновляйте постоянный файл cookie каждый раз, когда пользователь входит на ваш сайт, в качестве дополнительной меры безопасности.

Я также поддерживаю хранение IP-адресов и запрещение постоянных входов в систему, если IP-адрес не совпадает.Лучше не авторизоваться, чем взломанный сайт.

0 голосов
/ 12 мая 2011

Идея о куки - одна из лучших, которые вы можете реализовать в AFAIK.

Вторая идея - использовать, например, алгоритм BlowFish.Итак, вы будете сериализовать массив пользователя и передать его, а затем зашифровать его алгоритмом BlowFish.Если ваш пользователь войдет на ваш сайт, вы возьмете у него cookie-файл и расшифруете его с помощью секретной информации от вашего blowfish, отмените его сериализацию, затем проверьте имя пользователя и пароль, но это не так безопасно, как метод session_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...