Ответ 1
Файл cookie всегда должен быть случайным значением, которое истекает. Бывают случаи, когда вы можете сохранить состояние как значение cookie, и это не будет опасным, например, предпочитаемым пользователем языком, но этого следует избегать как можно больше. Превращение HttpOnlyCookies в, отличная идея.
Прочитайте A3: "Сломанная аутентификация и управление сеансами" в OWASP топ-10 за 2010 год. Важным моментом в этом разделе является то, что https должен использоваться для всего сеанса. Если сеанс длится очень долго, это еще более важно.
Также имейте в виду, что "Remember Me" создает большое окно, в котором злоумышленник может "ездить" на сеансе. Это дает злоумышленнику очень долгое время (месяцы?), В котором он может доставить атаку CSRF. Даже если у вас есть защита CSRF, злоумышленник все еще может ездить на сеансе с XSS и XmlHttpRequest (HttpOnlyCookies предотвратит полный захват). "Remember Me" делает другие угрозы, такие как xss, csrf, обнюхивает более серьезное. Пока эти уязвимости были устранены, тогда у вас не должно быть проблем с хакерами реального мира.
Самый простой (и безопасный) подход для реализации функции "помнить меня" - это изменить тайм-аут сеанса вашего файла web.config:
<configuration>
<system.web>
<sessionState timeout="60"/>
</sessionState>
</system.web>
</configuration>
Введите тайм-аут на что-то высокое, может быть, на месяц или около того. Если флажок "Запомнить меня" не установлен, сохраните переменную сеанса более обычного тайм-аута (например, 24 часа). Проверьте эту переменную сеанса в файле заголовка для каждого запроса. Если флажок установлен, тогда действуйте нормально и пусть asp.net позаботится об этом.
Если сеанс не истекает, это будет намного проще для грубой силы. Эти значения большие, но позволяют хакеру потратить годы, пытаясь угадать идентификатор сеанса, является уязвимостью.