Я создаю сайт ASP.NET MVC 2, где в настоящее время я реализую форму регистрации OpenID.К сожалению, я предвижу возможную ошибку безопасности / уязвимость в моей архитектуре .
Вот как я хочу, чтобы вход в OpenID работал:
- Запросы пользователей / учетная запись/ Login, контроллер отправляет обратно OpenIDLogin View.
- Пользователь вводит свой OpenID в View, затем происходит авторизация OpenID, и, наконец, OpenID возвращается в контроллер.
- Контроллер проверяет, является лиOpenID в настоящее время используется пользователем в системе или нет.Если это так, пользователь входит в эту учетную запись.Если нет, процесс регистрации начинается.
А теперь процесс регистрации OpenID:
- Идентификатор OpenID, а также любая другая информация, предоставляемая поставщиком OpenID (например, адрес электронной почты или имя), помещается в мой пользовательский ViewModel и отправляется в мое представление OpenIDRegistrationForm.
- Представление RegistrationForm сохраняет OpenID в скрытом поле , чтобы обеспечить его отправку.обратно в контроллер.
- Пользователь заполняет представление RegistrationForm и отправляет его обратно в контроллер.
- Контроллер создает учетную запись пользователя и помещает OpenID в базу данных.
Ошибка, которую я вижу в своей архитектуре, заключается в том, что пользователь может изменить скрытое значение в представлении RegistrationForm .Таким образом, они могут подделать свой OpenID !
. Я обязательно добавлю еще один раунд проверки к окончательному действию контроллера регистрации, чтобы убедиться, что предоставленный OpenID еще не существует., но все еще существует возможность подмены.
Можно ли как-нибудь улучшить мою архитектуру ?Я не хочу, чтобы это плохо заканчивалось ...
Одним из решений, которое я рассматриваю, является шифрование OpenID перед отправкой его в View, а затем расшифровка, когда он достигает Controller.Должен ли я попробовать это?
Спасибо за вашу помощь заранее.