Skip to main content

V3.4.2 Cookie-based Session Management

Requirement:#

Verify that cookie-based session tokens have the 'HttpOnly' attribute set. (C6)

Explanation:#

HttpOnly — это дополнительный флаг , включенный в заголовок HTTP-ответа Set-Cookie. Использование флага HttpOnly при создании файла cookie помогает снизить риск доступа скрипта на стороне клиента к защищенному файлу cookie (если браузер поддерживает это).

Атрибут HttpOnly cookie предписывает веб-браузерам не разрешать скриптам (например, JavaScript или VBscript) доступ к файлам cookie через объект DOM document.cookie. Эта защита идентификатора сеанса обязательна для предотвращения кражи идентификатора сеанса с помощью XSS-атак. Однако, если атака XSS сочетается с атакой CSRF, запросы, отправляемые веб-приложению, будут включать файлы cookie сеанса, поскольку браузер всегда включает файлы cookie при отправке запросов. Файл HttpOnly cookie защищает только конфиденциальность файла cookie; злоумышленник не может использовать его в автономном режиме, вне контекста атаки XSS.

Remediation:#

Если браузер, поддерживающий HttpOnly, обнаруживает файл cookie, содержащий флаг HttpOnly, и код сценария на стороне клиента пытается прочитать файл cookie, в результате браузер возвращает пустую строку . Это приводит к сбою атаки, не позволяя вредоносному (обычно XSS) коду отправлять данные на веб-сайт злоумышленника.

1) JAVA

Начиная с версии Java Enterprise Edition 6 (JEE 6), в которой используется технология Java Servlet 3.0, программно легко установить флаг HttpOnly для файла cookie.

На самом деле setHttpOnly и isHttpOnly методы доступны в Cookie интерфейсе JEE 6, JEE 7, а также для файлов cookie сеанса (JSESSIONID) JEE 6, JEE 7;

Более того, начиная с JEE 6, также декларативно легко установить HttpOnly флаг в файле cookie сеанса, применив следующую конфигурацию в дескрипторе развертывания WEB-INF/web.xml:

<session-config>
<cookie-config>
<http-only>true</http-only>
</cookie-config>
</session-config>

2) C#

HttpCookie myCookie = new HttpCookie("myCookie");
myCookie.HttpOnly = true;
Response.AppendCookie(myCookie);

3) VB.NET

Dim myCookie As HttpCookie = new HttpCookie("myCookie")
myCookie.HttpOnly = True
Response.AppendCookie(myCookie)

Additional:#

https://owasp.org/www-community/HttpOnly

https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html