OpenID: Почему безопасное хранение заявленных идентификаторов в cookie - PullRequest
0 голосов
/ 18 сентября 2011

Я только что начал интеграцию OpenID на моем сайте. Все примеры, которые я видел, хранят заявленные идентификаторы в файлах cookie. Насколько это безопасно?

Например, myopenid.com возвращает заявленный идентификатор {username} .myopenid.com

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

Конечно, вы шифруете / md5 идентификатор перед тем, как поместить его в куки и использовать для аутентификации, но это похоже на сохранение имени пользователя без пароля!

Обновление

Теперь, когда я больше думал об этом, я понял, что вам нужно войти в систему провайдера OpenID, поэтому даже если хакер получает имя пользователя, ему все равно нужен пароль провайдера для входа в систему. Я прав?

Обновление 2 Нет, обновление 1 неверно :) Мой сайт не может проверить, успешно ли пользователь вошел в систему или нет. Все, что я получаю, это заявленный идентификатор, и я просто должен верить, что пользователь аутентифицирован. Это действительно сбивает с толку ...

1 Ответ

3 голосов
/ 18 сентября 2011

Зная, что заявленная личность пользователя недостаточна для аутентификации.

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

Что касается «доверия тому, что пользователь аутентифицирован» - нет, вы не доверяете.В качестве заключительной части аутентификации OpenID вы должны убедиться, что сообщение аутентификации приходит от провайдера.Существуют различные меры безопасности, чтобы гарантировать, что сообщение является подлинным, неизменным и т. Д. Если вы это сделаете, вы уверены, что ваш пользователь правильно аутентифицирован провайдером.

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

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

В заключение: представьте, что OpenID является заменой для проверки пароля.Вам не нужно (и не следует) хранить логины и пароли в файлах cookie, и вам не нужно хранить заявленные идентификаторы.Точно так же вы не проверяете, совпадают ли логин и пароль каждый раз, но помните, что пользователь аутентифицируется в сеансе.

...