Какие были бы хорошие практики управления пользователями для многоплатформенного WebApp? - PullRequest
1 голос
/ 03 июля 2011

Мне бы хотелось получить ваш совет о том, что используют надежные фреймворки / код (RoR, Zend, Symfony, Django ...).

Я использую для своей системы управления пользователями (понимаю: логин, выход из системы, пользователь вошел в систему, идентификатор_пользователя, имя пользователя и т. Д .;) простая и крошечная структура (userCake). Я делаю рефакторинг своего кода, использую API для iPhone / Androi / Js, и я хотел бы обновить этот кусок кода. Мне нужно знать, просто ли я переставляю свои классы, зависимости, классы и сохраняю тот же процесс ИЛИ если мне нужно что-то изменить.

Текущее состояние игры
После успешного входа в систему я извлекаю все его данные, сериализую их, создаю sessionID. Я храню этот sessionID в пользовательском Cookie и все сериализованные данные в таблице БД, которая связывает sessionID и данные.

Затем на моем веб-сайте каждый раз, когда запрашивается страница, я извлекаю из БД сериализованные данные, соответствующие идентификатору сеанса, который пользователь имеет в своем файле cookie / сеансе. Затем я делаю запрос, чтобы убедиться, что имя пользователя и хешированный пароль совпадают в моей БД, и мой пользователь все еще активен (не заблокирован и не удален). То же самое сделано с моим API (iphone, Android, JS должен дать мне идентификатор сессии).

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

Что я ищу
То, что я объяснил выше, мне кажется хорошим. Но достаточно ли это безопасно? Действительно ли необходимо дважды проверять БД каждый раз, когда все в порядке с именем пользователя и паролем, я не могу просто доверять сериализованным данным в моей таблице сеансов?

Как все это делается в известных фреймворках (Django, Rails, Symfony ..)?

1 Ответ

1 голос
/ 03 июля 2011

Первый:

После успешного входа в систему я восстановить все его данные, сериализовать его, создать sessionID. Я храню это sessionID в Cookie пользователя и все сериализованные данные в таблице БД, которые связывает идентификатор сессии и данные.

Когда вы "извлекаете все его данные", не было ли это уже из базы данных? зачем тогда сериализовывать данные и помещать их обратно в другую часть базы данных? почему бы просто не сохранить идентификатор пользователя в переменной сеанса и использовать его для запроса любой пользовательской информации, которая может вам понадобиться?

Второе:

Затем я делаю запрос, чтобы убедиться, что имя пользователя и хешированный пароль спички в моем БД

Где вы получаете имя пользователя и пароль для каждого запроса на проверку БД? это звучит так, как будто вы тестируете пользователя и передаете данные, хранящиеся в вашей базе данных, в соответствии с исходной информацией в БД. Если это так, это всегда будет совпадать, так как вы устанавливаете это сами.

Третье:

Почему вы используете задание cron для удаления истекших сеансов? Сессии имеют встроенный механизм истечения срока действия.

Как правило, вы захотите защитить сеанс с помощью снятия отпечатков пальцев и / или трендов. затем вы можете просто сохранить первичный ключ БД вашего пользователя в переменной сеанса и использовать каждый запрос для получения любых пользовательских данных, которые вам могут понадобиться. Кроме того, вам не нужно создавать идентификатор сеанса и сохранять его в cookie-файле самостоятельно. PHP обрабатывает этот механизм для вас, когда вы вызываете session_start (), а затем сохраняете все переменные сеанса, которые хотите сохранить, в суперглобальном массиве $ _SESSION. Большинство упомянутых вами фреймворков имеют открытый исходный код, поэтому, если хотите, вы можете просмотреть их код и сами убедиться, что они делают.

...