Лучшая практика для реализации безопасный “помнит меня”

Иногда, я сталкиваюсь с определенными платформами веб-разработки, которые не обеспечивают функцию аутентификации, такой как в Аутентификации ASP.NET.

Я задавался вопросом, какие меры безопасности нужно рассмотреть, когда реализация "Помнит Меня" функции входа в систему ручным кодированием?

Вот вещи, которые я обычно делаю:

  1. Сохраните имя пользователя в cookie. Имя пользователя не шифруется.

  2. Сохраните секретный ключ в cookie. Секретный ключ сгенерирован с помощью одного пути функция на основе имени пользователя. Сервер проверит секретный ключ против имени пользователя, чтобы гарантировать, что это имя пользователя не изменяется.

  3. Используйте HttpOnly в cookie. http://www.codinghorror.com/blog/2008/08/protecting-your-cookies-httponly.html

Что-либо еще, что я пропустил, который мог возможно привести дыры в системе безопасности?

23
задан Zoe 4 September 2012 в 00:11
поделиться

1 ответ

Cookie всегда должен быть случайным значением, срок действия которого истекает. Существуют случаи, когда вы можете хранить состояние как значение cookie и это не будет представлять угрозу безопасности, например, предпочитаемый язык пользователя, но этого следует избегать как можно чаще. Включение HttpOnlyCookies - отличная идея.

Прочитайте раздел A3: "Нарушенная аутентификация и управление сеансами" в OWASP top 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 позаботиться об этом.

Если срок действия сессии не истек, то перебор будет намного проще. Эти значения велики, но позволить хакеру потратить годы на попытки угадать идентификатор сессии - это уязвимость.

18
ответ дан 29 November 2019 в 03:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: