Простая защита паролем на странице в ASP.NET MVC

Я хочу защитить отдельные (динамические) страницы в приложении ASP.NET MVC.

Я не хочу использовать полномасштабную систему аутентификации — мы уже используем аутентификацию с помощью форм для администраторов сайта. Вместо этого мы можем рассылать ссылки на страницу с паролем для конкретных пользователей.

В настоящее время я обрабатываю это так: когда отправляется действительный пароль, мы создаем зашифрованный файл cookie, содержащий идентификатор страницы (Guid) и их идентификатор сеанса, и перенаправляем их на страницу. Затем в нашем действии контроллера «Страница» мы проверяем этот файл cookie.

Итак, первый вопрос: является ли это лучшим (наиболее безопасным) подходом (кроме использования проверки подлинности с помощью форм)?

Второй вопрос: могу ли я прочитать машинный ключ, используемый Forms Authentication для выполнения шифрования, или еще лучше использовать FormsAuthentication для шифрования файла cookie (единственная перегрузка, которую я вижу, — это та, которая требует FormsAuthenticationTicket)?

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

[Обновлять]

Что касается доступа к машинному ключу, я нашел свой ответ по адресу http://rich-rogers.com/archive/asp.net-c-sharp-encrypt-hash-using-machinekey-values

[Обновление 2]

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


person Ben Foster    schedule 06.04.2011    source источник


Ответы (1)


Чтобы сделать ваш cookie-ключ действительно безопасным, вам нужно сделать его доступным только на SSL-страницах, иначе кто-то может его получить, и даже если он зашифрован, он может его использовать.

    Request.Cookies[cookieName].HttpOnly = true;
    Request.Cookies[cookieName].Secure = true;

Также читать: Может ли какой-нибудь хакер украсть файл cookie у пользователя и войти под этим именем на веб-сайт?

person Aristos    schedule 06.04.2011