﻿# V5341\. A cookie was created without enabling the 'Secure' attribute\. This may lead to the exposure of sensitive data\.

Анализатор обнаружил создание cookie без атрибута Secure\. 

Эта потенциальная уязвимость относится к следующим категориям OWASP Top 10:

* [A05:2021 — Security Misconfiguration](https://owasp.org/Top10/2021/A05_2021-Security_Misconfiguration/);
* [A02:2025 — Security Misconfiguration](https://owasp.org/Top10/2025/A02_2025-Security_Misconfiguration/)\.

Рассмотрим пример:

```cpp
public void servletExample(
  HttpServletRequest request, 
  HttpServletResponse response
) {
    Cookie cookie = new Cookie("name", getCookieValue());
    cookie.setSecure(false);
    response.addCookie(cookie);
    ....
}
```

Объект `cookie` создаётся и помещается в ответ сервера\. При этом после его создания был вызван метод `Cookie#setSecure` со значением `false`, явно указывающий не выставлять значение `Secure` создаваемым cookie\. 

Отсутствие значения `Secure` в заголовке сookie приводит к тому, что такой объект сookie будет передаваться от браузера к серверу как по HTTPS, так и по незащищённому HTTP протоколу\. Последнее приводит к тому, что сookie с чувствительными данными будут передаваться в незащищённом виде\. И злоумышленник, получивший незашифрованный запрос, сможет эти чувствительные данные извлечь без необходимости их расшифровывать\.

Чтобы не дать возможности браузеру отправлять сookie по незащищённому HTTP протоколу, необходимо выставить соответствующий атрибут при создании объекта `Cookie`:

```cpp
public void servletSecureExample(
  HttpServletRequest request, 
  HttpServletResponse response
) {
    Cookie cookie = new Cookie("name", getCookieValue());
    cookie.setSecure(true);
    response.addCookie(cookie);
    ....
}
```

Тогда заголовок сookie будет содержать атрибут `Secure`, который укажет браузеру, что сookie можно отправлять только по HTTPS протоколу\.

Также учитывайте различные API, используемые для создания `Cookie`\-объектов\. Большинство из таких API при создании объекта по умолчанию не выставляют флаг `Secure`\. Например, в следующих примерах также будут неявно создаваться "небезопасные" сookie:

```cpp
public void insecureCookie(
  HttpServletRequest request, 
  HttpServletResponse response
) {
    Cookie cookie = new Cookie("name", getCookieValue());
    response.addCookie(cookie);
    ....
}
```



```cpp
public void insecureResponseCookie(
  HttpServletRequest request, 
  HttpServletResponse response
) {
    ResponseCookie cookie = ResponseCookie
                 .from("name", getCookieValue())
                 .build();
    response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString());
    ....
}
```