V3.4.1 Cookie-based Session Management
Requirement:#
Verify that cookie-based session tokens have the 'Secure' attribute set. (C6)
Explanation:#
Атрибут 'Secure' - это важная функция безопасности, которая может быть установлена для HTTP-cookies. Когда cookie имеет атрибут 'Secure', это означает, что браузер будет передавать его только по зашифрованному (HTTPS) соединению. Если атрибут 'Secure' не установлен, cookie может передаваться как по защищенному (HTTPS), так и по незащищенному (HTTP) соединению, что делает его уязвимым для перехвата злоумышленниками, если пользователь обращается к приложению через незащищенное соединение.
Целью использования защищенных файлов cookie является защита конфиденциальной информации, связанной с сессией, такой как токены сессии, учетные данные аутентификации и другие конфиденциальные данные, используемые для идентификации и авторизации пользователей. Благодаря тому, что файлы cookie передаются только по зашифрованным соединениям, значительно снижается риск подслушивания, session hijacking и атак типа "man-in-the-middle".
Для выполнения этого требования необходимо убедиться в следующем:
Secure Attribute Setting: Все файлы cookie, содержащие токены сессий и конфиденциальные данные, должны иметь в заголовках HTTP-response атрибут 'Secure'. Это можно сделать, добавив флаг 'Secure' в заголовок Set-Cookie в момент установки cookie. Например:
SSL/TLS Usage: Для обеспечения безопасной передачи файлов cookie приложение должно обслуживаться по протоколу HTTPS (SSL/TLS). Без HTTPS атрибут 'Secure' становится неэффективным, поскольку браузер не будет применять шифрование при передаче cookie.
Remediation:#
1 ) PHP
В PHP флаги для cookies можно задать с помощью функции setcookie(). Функция setcookie() позволяет задать различные атрибуты для cookies, в том числе атрибут 'Secure', который обеспечивает передачу cookies только по защищенным (HTTPS) соединениям.
Cинтаксис установки флагов в функции PHP setcookie():
пример установки cookie с атрибутом 'Secure':
В приведенном выше примере cookie с именем "session-token" будет иметь атрибут 'Secure', установленный в true, что означает, что он будет передаваться только по защищенным (HTTPS) соединениям.
Не забывайте использовать эту функцию setcookie() в рамках управления сеансами и аутентификации вашего приложения, чтобы обеспечить безопасность ваших cookie-файлов. Кроме того, убедитесь, что ваше приложение правильно настроено на передачу содержимого по HTTPS, поскольку атрибут 'Secure' действует только в сочетании с подключением по протоколу HTTPS.
2) ASP.NET
Установите следующее в Web.config:
Для некоторых объектов со свойством requireSSL, таких как файлы cookie проверки подлинности форм, задайте атрибут в файле web.config для этого конкретного элемента. Например:
3) JAVA
В Java установить флаги для cookies можно с помощью класса javax.servlet.http.Cookie. Класс Cookie позволяет задавать различные атрибуты для файлов cookie, в том числе атрибут 'Secure', который обеспечивает передачу файлов cookie только по защищенным (HTTPS) соединениям.
Чтобы задать атрибут 'Secure' для cookie в Java, выполните следующие действия:
Импортируйте необходимые классы и создайте новый объект Cookie и установите его свойства, включая атрибут 'Secure':
В приведенном примере для объекта Cookie с названием "session-token" атрибут 'Secure' будет установлен в true, что гарантирует его передачу только по защищенным (HTTPS) соединениям.
Обратите внимание, что метод setSecure(true) устанавливает атрибут 'Secure' для cookie, но для корректной работы атрибута ваше приложение должно быть настроено на передачу содержимого по HTTPS. Атрибут 'Secure' действует только в сочетании с подключением по протоколу HTTPS.
Additional:#
https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html
https://owasp.org/www-community/controls/SecureCookieAttribute