Почему Persona требует, чтобы я проверил утверждение на сервере?
Краткое руководство по настройке Persona говорит, что мне нужно проверить утверждение с сервера:
Чрезвычайно важно, чтобы вы проверяли утверждение на своем сервере, а не в JavaScript, работающем в браузере пользователя, поскольку это было бы легко подделать.
Хотя я это уже реализовал, зачем мне это делать на сервере? В любом случае мне нужно отправить утверждение на собственный сервер Persona здесь: https://verifier.login.persona.org/verify
Я просто хочу знать, в чем заключаются проблемы безопасности, если я отправляю утверждение прямо из браузера? Что может быть подделано с помощью браузера, и почему те же данные не могут быть подделаны при отправке через мой собственный сервер?
Спасибо!
1 ответ
Проблема не столько в том, что вы отправляете утверждение непосредственно из браузера в службу проверки, но скорее в том, что происходит сразу после этого.
Если сервер выполняет проверку (отправив ее verifier.login.persona.org
) тогда он знает, что утверждение верно, потому что оно проверило себя. Враждебный пользователь не может перехватывать и вмешиваться в связь между сервером и службой проверки. Таким образом, сервер может создать сеанс для пользователя и установить cookie. Это все хорошо.
С другой стороны, если клиент выполняет проверку, то как создается сеанс? Возможно, код клиента проверяет правильность утверждения и затем вызывает /create_session
на сервере? Проблема здесь заключается в том, что сервер должен верить, что когда клиент запрашивает создание сеанса, он фактически выполняет проверку.
Клиентскому коду, выполняемому в браузере пользователя, нельзя доверять, поскольку он может быть легко изменен (например, с помощью инструментов разработчика) пользователями. Поэтому, пока вы отправляете мне код JavaScript, который правильно проверяет утверждения, я мог бы изменить эту проверку, чтобы пропустить проверку утверждений и просто лгать вашему серверу при запросе на создание нового сеанса.