V3.2.3 Session Binding
Requirement:#
Verify the application only stores session tokens in the browser using secure methods such as appropriately secured cookies (see section 3.4) or HTML 5 session storage.
Explanation:#
Сессионные токены используются для сохранения состояния сессии пользователя на стороне сервера и позволяют пользователям взаимодействовать с приложением без необходимости повторной аутентификации при каждом действии. Безопасное хранение сессионных токенов очень важно для предотвращения несанкционированного доступа к учетной записи пользователя и защиты конфиденциальных данных.
Требование гласит, что приложение должно хранить сессионные токены только в браузере пользователя, используя безопасные методы, такие как:
Securely Secured Cookies: При использовании файлов cookie для хранения сессионных токенов они должны быть снабжены соответствующими атрибутами безопасности. Это включает в себя использование атрибута HttpOnly для предотвращения доступа клиентских скриптов к cookie, атрибута Secure для обеспечения передачи cookie только по защищенным HTTPS-соединениям и атрибута SameSite для защиты от cross-site request forgery (CSRF) атак.
HTML5 Session Storage: В HTML5 появилась функция "session storage", которая позволяет разработчикам хранить на стороне клиента данные, которые остаются доступными в течение текущего просмотра сессии. При использовании сессионного хранилища HTML5 для хранения сессионных токенов необходимо убедиться, что конфиденциальная информация не хранится в "local storage" (которое сохраняется во время сессий браузера), а ограничивается "session storage" (очищается при завершении сессии браузера).****
Remediation:#
Чтобы обеспечить безопасное хранение сессионных токенов в браузере, выполните следующие действия:
- При использовании файлов cookie для хранения сессионных токенов обязательно устанавливайте атрибуты HttpOnly и Secure для повышения уровня безопасности.
- Атрибут HttpOnly предотвращает доступ к cookie сценариев на стороне клиента, что снижает риск кражи сессионного токена в результате cross-site scripting (XSS) атак.
- Атрибут Secure обеспечивает передачу файлов cookie только по защищенным HTTPS-соединениям, предотвращая перехват сессионных токенов по незашифрованным каналам.
- Установите для атрибута SameSite значение Lax или Strict для защиты от атакой cross-site request forgery (CSRF).
- Определите подходящее время истечения срока действия для сессионных токена cookie. Более короткое время истечения срока действия уменьшает возможность злоумышленников повторно использовать украденные токены.
- Реализуйте механизм регенерации сессионных токенов по истечении определенного периода времени или при наступлении определенных событий безопасности (например, изменение привилегий пользователя, смена пароля).
****
- Избегайте хранения конфиденциальных данных непосредственно в файлах cookie. Вместо этого следует хранить ссылку или идентификатор на данные сессии, хранящиеся на стороне сервера, что уменьшает последствия взлома cookie.
- Используйте механизмы безопасного управления сессиями, предоставляемые фреймворком или платформой веб-приложения. Для безопасного сохранения состояния сессии следуйте лучшим практикам.
- Если для хранения сессионных токенов или другой конфиденциальной информации используется хранилище сеансов HTML5, убедитесь, что оно используется надлежащим образом, и отличите его от "local storage".
- Регулярно очищайте сессионное хранилище, чтобы предотвратить сохранение данных за пределами текущего браузерного сессии.
- Регулярно проводить тестирование системы безопасности, включая оценку уязвимостей, тестирование на проникновение и анализ кода, для выявления и устранения уязвимостей управления сессиями.****
- Реализовать механизм безопасного выхода из системы, позволяющий аннулировать и отзывать токены сеансов при явном выходе пользователей из системы или при неактивности сеансов в течение определенного периода времени.****
- Внедрите протоколирование и мониторинг для обнаружения подозрительной активности, связанной с управлением сессиями. Разработать план реагирования на инциденты для быстрого реагирования на возможные нарушения.
Пример сохранения сессионного токена в безопасном файле cookie с помощью Node.js и промежуточного программного обеспечения cookie-parser:
В этом примере метод res.cookie() используется для сохранения маркера сеанса в файле cookie. Для параметра httpOnly установлено значение true, чтобы предотвратить доступ к файлу cookie с помощью JavaScript, а для параметра secure установлено значение true, чтобы отправлять файл cookie только через соединения HTTPS. Для параметра sameSite установлено значение «строгий», чтобы предотвратить отправку файла cookie в межсайтовых запросах.
Пример на языке Python, демонстрирующий, как устанавливать и извлекать маркеры сеанса с помощью защищенных файлов cookie:
В этом примере мы используем веб-фреймворк Flask для создания простого веб-приложения с двумя маршрутами. set_session_token устанавливает сессионный токен в защищенный cookie с атрибутами secure, httponly и samesite. get_session_token извлекает сессионный токен из защищенного cookie и проверяет его на соответствие жестко заданному сессионному токену (SESSION_TOKEN).
Additional:#
https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#Secure_and_HttpOnly_cookies
https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html
https://owasp.org/www-community/vulnerabilities/Insufficient_Session-ID_Length