Как мне проверить, что мой openid.op_endpoint, когда запрос завершен - PullRequest
3 голосов
/ 10 марта 2010

У меня на сайте есть система аутентификации на основе Open ID.

Иногда пользователи регистрируют учетную запись в foo@gmail.com и пытаются войти в систему с помощью провайдера Google Open ID https://www.google.com/accounts/o8/id, в этом случае я хочу автоматически связать учетную запись и войти в нее.

Когда процесс завершен, я откуда-то получаю полезную нагрузку, утверждая, что openid.op_endpoint=https://www.google.com/accounts/o8/id.

Мой вопрос:

  • Могу ли я доверять openid.op_endpoint, чтобы быть верным? Может ли это быть каким-то образом подделано вредоносным поставщиком openid?

В качестве иллюстрации, скажем, кто-то вводит http://evil.org в качестве своего провайдера openid, могу ли я каким-то образом получить ответ, который утверждает, что openid.op_endpoint является google? Нужно ли хранить дополнительную информацию против одноразового номера для проверки?

Спецификация Хитроумно понять

1 Ответ

1 голос
/ 10 марта 2010

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

Итак, убедитесь, что ваша библиотека приличная. Тогда да, доверьтесь параметру openid.op_endpoint. Но не тот, который вы получаете из строки запроса самостоятельно, поскольку сообщения OpenID могут быть отправлены вам, и параметр не будет отображаться в строке запроса. Хуже того, если бы вы проверяли строку запроса в этом случае, вы, вероятно, открыли бы себе дыру в безопасности, где злоумышленник может добавить этот параметр в строку запроса и обмануть вас, соблюдая требования библиотеки. Поэтому лучше всего использовать API, предоставляемый библиотекой, чтобы выяснить, какова конечная точка OP.

Что касается связывания учетных записей таким способом, то это хороший подход, поскольку Google отправляет только те адреса электронной почты, которые, как он знает, действительно контролируются пользователем. Если вы уже потребовали, чтобы ваш пользователь прошел через этап проверки электронной почты, то привязка учетной записи безопасна. Но если адрес электронной почты, который вы указали для пользователя, не был подтвержден, вы не должны связывать учетные записи, основанные на этом совпадении, или я могу захватить чужую учетную запись, создав учетную запись с чужим адресом электронной почты, а затем ждать их войти в систему с помощью OpenID и теперь я могу войти в их аккаунт.

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