Простая защита паролем на странице в ASP.NET MVC - PullRequest
0 голосов
/ 06 апреля 2011

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

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

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

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

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

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

[Update]

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

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

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

1 Ответ

1 голос
/ 06 апреля 2011

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

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

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

...