﻿# V5617\. OWASP\. Assigning potentially negative or large value as timeout of HTTP session can lead to excessive session expiration time\.

Анализатор обнаружил код, в котором производится установка бесконечного или очень большого срока действительности сессии\. Это может привести к проблемам, связанным с безопасностью данных аутентифицированного пользователя\.

Ошибки, связанные с установкой некорректного срока действительности сессии, относятся к следующим категориям OWASP Top 10 Application Security Risks:

* [A2:2017\-Broken Authentication](https://owasp.org/www-project-top-ten/2017/A2_2017-Broken_Authentication) в списке 2017 года;
* [A7:2021\-Identification and Authentication Failures](https://owasp.org/Top10/A07_2021-Identification_and_Authentication_Failures/) в списке 2021 года\.

Первый пример:

```cpp
public void ConfigureSession(HttpContext current, ....)
{
  HttpSessionState session = current.Session;
  session.Timeout = -1;
  ....
}
```

Значение, присваиваемое свойству 'HttpSessionState\.Timeout', указывает срок действительности сессии в минутах\.

Присваивание свойству 'Timeout' отрицательного значения приводит к установке потенциально бесконечного срока действительности сессии\. Если пользователь не выполнил корректный выход из системы, то его данные будут в опасности\. К примеру, следующий пользователь этой системы может получить доступ к данным предыдущего, потому что сессия последней аутентификации на сервере ещё активна\. 

В другом случае, злоумышленник, укравший токен аутентификации, может иметь больше времени на совершение неправомерного доступа\. Токен аутентификации может украден, например, посредством проведения [XSS\-атаки](https://pvs-studio.ru/ru/blog/terms/6462/)\.

Второй пример:

```cpp
public void ConfigureSession(HttpContext current, ....)
{
  HttpSessionState session = current.Session;
  session.Timeout = 120;
  ....
}
```

Опасность и эксплуатация уязвимости второго примера аналогична первому\.

Пороговым значением, когда анализатор считает код корректным, является срок действия менее двух часов:

```cpp
public void ConfigureSession(HttpContext current, ....)
{
  HttpSessionState session = current.Session;
  session.Timeout = 30;
  ....
}
```

Большинство библиотек и фреймворков по умолчанию предлагают срок не более чем 30 минут\.

Предупреждение для слишком большого присваиваемого значения имеет уровень Medium, а предупреждение о бесконечном сроке – уровень High\.