Основной причиной отказа от использования сеанса в качестве механизма аутентификации является то, что он может сделать ваше приложение уязвимым для Session Fixation. Например, проблема может заключаться в том, что пользователь прибыл на ваш сайт с использованием протокола HTTP и получил идентификатор сеанса, который хранится в файле cookie ASP.NET_SessionId
. Пользователь может позже войти в систему, и хотя ваши страницы входа могут быть защищены под HTTPS, токен сеанса уже был сгенерирован под HTTP, что означает, что он уже был отправлен с использованием cleartext.
Чтобы ответить на другие вопросы:
Почему сеансы безопаснее, чем куки, если идентификатор сеанса сохраняется в печенье?
Данные, хранящиеся в сеансе, хранятся на стороне сервера, поэтому злоумышленнику труднее манипулировать этими данными. Все хранилища файлов cookie являются токеном для этих данных, а не самими данными. Сказав это, по-прежнему безопаснее использовать FormsAuthenticationProvider
, так как это создает новый токен аутентификации после завершения входа в систему, а не при запуске сеанса по причинам, позволяющим избежать фиксации сеанса, как указано выше.
Могу ли я сделать это более безопасным (и продолжить использование сеанса)? Как внутренне ASP.NET Пользовательская система авторизации?
Встроенный провайдер уже подходит по назначению, поэтому было бы желательно использовать его, а не выдумывать другой механизм для удовлетворения ваших требований. Он также легко расширяется, поэтому вы можете настроить его в соответствии с вашими потребностями. Аутентификация пользователя ASP.NET создает зашифрованный билет и сохраняет его в файле cookie, а не хранит ссылку на переменную на стороне сервера: http://support.microsoft.com/kb/910443
Я также хотел бы обратить ваше внимание на механизм вывески и как его защитить.В частности,
Вызов метода SignOut удаляет только файлы cookie проверки подлинности форм. Веб-сервер не сохраняет действительные и истекшие билеты на аутентификацию для последующего сравнения. Это делает ваш сайт уязвимым для повторной атаки, если злоумышленник получает действительный файл cookie проверки подлинности.
Подробности здесь: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.signout.aspx
Кроме того, вы можете установить "secure" flag на вашем ASP auth cookie, чтобы предотвратить его утечку через HTTP с помощью MITM злоумышленника.
Безопасность - это не то, что вы хотите сделать сами, если вы не учитесь. Вы уверены, что не должны использовать встроенную систему безопасности? –