Передача информации в ViewModel между представлениями и контроллерами на сайте ASP.NET MVC 2 без возможности изменения информации - PullRequest
1 голос
/ 22 июля 2010

Я создаю сайт ASP.NET MVC 2, где в настоящее время я реализую форму регистрации OpenID.К сожалению, я предвижу возможную ошибку безопасности / уязвимость в моей архитектуре .

Вот как я хочу, чтобы вход в OpenID работал:

  1. Запросы пользователей / учетная запись/ Login, контроллер отправляет обратно OpenIDLogin View.
  2. Пользователь вводит свой OpenID в View, затем происходит авторизация OpenID, и, наконец, OpenID возвращается в контроллер.
  3. Контроллер проверяет, является лиOpenID в настоящее время используется пользователем в системе или нет.Если это так, пользователь входит в эту учетную запись.Если нет, процесс регистрации начинается.

А теперь процесс регистрации OpenID:

  1. Идентификатор OpenID, а также любая другая информация, предоставляемая поставщиком OpenID (например, адрес электронной почты или имя), помещается в мой пользовательский ViewModel и отправляется в мое представление OpenIDRegistrationForm.
  2. Представление RegistrationForm сохраняет OpenID в скрытом поле , чтобы обеспечить его отправку.обратно в контроллер.
  3. Пользователь заполняет представление RegistrationForm и отправляет его обратно в контроллер.
  4. Контроллер создает учетную запись пользователя и помещает OpenID в базу данных.

Ошибка, которую я вижу в своей архитектуре, заключается в том, что пользователь может изменить скрытое значение в представлении RegistrationForm .Таким образом, они могут подделать свой OpenID !

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

Можно ли как-нибудь улучшить мою архитектуру ?Я не хочу, чтобы это плохо заканчивалось ...

Одним из решений, которое я рассматриваю, является шифрование OpenID перед отправкой его в View, а затем расшифровка, когда он достигает Controller.Должен ли я попробовать это?

Спасибо за вашу помощь заранее.

1 Ответ

1 голос
/ 22 июля 2010

хмм .... Хорошо. «правильное» решение - предоставить ВПЛ, например, http://startersts.codeplex.com/

и тот хранит для анонимного пользователя токен OpenId, пока он не будет полностью аутентифицирован.

простое решение - дать ему своего рода sessionid и сохранить его на стороне сервера.

еще более простое решение - зашифровать openid, чтобы пользователь не мог его изменить.

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