Почему Persona требует, чтобы я проверил утверждение на сервере?

Краткое руководство по настройке Persona говорит, что мне нужно проверить утверждение с сервера:

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

Хотя я это уже реализовал, зачем мне это делать на сервере? В любом случае мне нужно отправить утверждение на собственный сервер Persona здесь: https://verifier.login.persona.org/verify

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

Спасибо!

1 ответ

Решение

Проблема не столько в том, что вы отправляете утверждение непосредственно из браузера в службу проверки, но скорее в том, что происходит сразу после этого.

Если сервер выполняет проверку (отправив ее verifier.login.persona.org) тогда он знает, что утверждение верно, потому что оно проверило себя. Враждебный пользователь не может перехватывать и вмешиваться в связь между сервером и службой проверки. Таким образом, сервер может создать сеанс для пользователя и установить cookie. Это все хорошо.

С другой стороны, если клиент выполняет проверку, то как создается сеанс? Возможно, код клиента проверяет правильность утверждения и затем вызывает /create_session на сервере? Проблема здесь заключается в том, что сервер должен верить, что когда клиент запрашивает создание сеанса, он фактически выполняет проверку.

Клиентскому коду, выполняемому в браузере пользователя, нельзя доверять, поскольку он может быть легко изменен (например, с помощью инструментов разработчика) пользователями. Поэтому, пока вы отправляете мне код JavaScript, который правильно проверяет утверждения, я мог бы изменить эту проверку, чтобы пропустить проверку утверждений и просто лгать вашему серверу при запросе на создание нового сеанса.

Другие вопросы по тегам