2013-03-05 4 views
4

Когда пользователь регистрируется на моем сайте, он создает 2 куки, один с идентификатором сеанса (который относится к идентификатору пользователя на бэкэнд), и помните, что cookie, который длится 3 месяца.Запомнить меня cookie, необходимо для сеанса cookie?

помнить меня печенье строится как:

userid:timeout:hash 

Если хэш является HMAC SHA256 хэш userid:timeout для предотвращения несанкционированного доступа.

Если идентификатор сеанса не существует (пользователь закрывает свой браузер и снова открывает его, чтобы файл cookie пропал, или идентификатор сеанса не существует в memcached), он просматривает куки-файл и повторно создает новый файл cookie сеанса , при условии, что он не был исчерпан, а хеш правильный.

Однако я не вижу смысла иметь сеансовый файл cookie вообще, поскольку идентификатор сеанса просто указывает на идентификатор пользователя в бэкэнд. Вместо этого я могу использовать память cookie для загрузки текущего пользователя.

Так что я думаю об утилизации сессии cookie полностью, и было бы интересно услышать некоторые мысли об этом. Оказывается ли этот подход относительно безопасным? Могу ли я сделать это лучше?

Заранее благодарен!

+0

Любой может вычислить хэш SHA. Вам нужно использовать HMAC. – SLaks

+0

Это HMAC, обновит вопрос – fire

+2

У ваших пользователей нет возможности не «запомнить меня»? Что делать, если они не хотят регистрироваться в течение 3 месяцев? Они должны выйти? Я мог ошибаться, но я чувствую, что многие люди полагаются на закрытие браузера, чтобы очистить свои «незапомненные» логины, поскольку это традиционно, как это делается. –

ответ

1

Да, это действительно достаточно безопасно для большинства случаев, но зачем включать данные пользователя в файл cookie, когда вы можете его избежать? Кроме того, есть небольшой недостаток:

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

Это мое решение для этого: создайте еще одну строку в пользовательской таблице, называемой userhash. Когда пользователь входит в систему, вы генерируете случайный хеш без какого-либо его ввода, просто случайным и сохраняете его как в таблице, так и в файле cookie. Тогда вам нужно только сохранить userhash:timeout в файле cookie. Вы проверяете это по отношению к базе данных, чтобы узнать, существует ли она, если это так, это ваш пользователь. Когда пользователь выходит из системы, cookie и строка в базе данных удаляются. По очевидным причинам вам нужно будет проверить, существует ли файл cookie перед сравнением (будет много пустых).

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

PD, было бы неплохо, если бы вы сказали, как защитить ваше приложение должно быть на самом деле ...

PD2, в случае, если не думать об этом все же, есть и другие, более серьезные проблемы безопасности (SSL сказать один).

+0

Да, это правда, хотя я стараюсь избегать записи в базу данных: -/ – fire

+0

Тогда я думаю, чтобы получить хэш из userid И пароль будет намного лучше, поскольку пароль можно легко изменить без ущерба для всей системы. –

+0

Спасибо, что согласился, я действительно ожидал другого ответа, так как я в основном пытаюсь сделать то же самое, что и вы. –

Смежные вопросы