Skip to main content

V3.1.1 Fundamental Session Management Security

Requirement:#

Verify the application never reveals session tokens in URL parameters.

Explanation:#

Когда пользователь входит в веб-приложение, сервер создает для него сессию, чтобы сохранить его состояние и идентичность во время навигации по приложению. Эта сессия часто представлена маркером сессии, который представляет собой уникальный идентификатор (обычно длинную строку символов), генерируемый сервером. Токены сеансов очень важны для поддержания сеансов пользователей и предоставления им доступа к авторизованным ресурсам.

Требование определяет, что сессионный токены не должны раскрываться в URL веб-приложения. Если сессионный токен включен в URL, он становится видимым в адресной строке браузера пользователя, истории браузера, а также, возможно, в журналах сервера или заголовках referer. Это может привести к различным рискам безопасности:

  • Information Exposure: если злоумышленник получает доступ к сессионному токену из URL-адреса, он может выдать себя за пользователя, используя этот токен, скомпрометировав учетную запись пользователя и конфиденциальную информацию.
  • Cross-Site Scripting (XSS) Attacks: если злоумышленник может внедрить вредоносные сценарии в URL-адрес или другие части приложения (например, посредством ввода данных пользователем), он может украсть сессионный токен или выполнить несанкционированные действия от имени пользователя.
  • Referer Header Leakage: некоторые веб-сайты могут непреднамеренно передавать конфиденциальные данные, включая токены сессии, через заголовки реферера, когда пользователи нажимают на ссылки с одного сайта на другой.

Remediation:#

Чтобы соответствовать этому требованию необходимо  выполнить следующие действия:

  • Use HTTP Headers or Cookies: Вместо передачи сессионных токенов в параметрах URL, используйте HTTP headers или secure cookies для управления и передачи сессионных токенов.  HTTP headers, такие как «Authorization», могут использоваться для безопасной отправки сессионных токенов в заголовках запроса.
  • Secure and HTTP-only Cookies: Если вы решите использовать файлы cookie для управления сеансом, убедитесь, что они используют флаги Secure и HTTP-only. Флаг Secure cookies передаются только по протоколу HTTPS, что предотвращает перехват и прослушивание злоумышленниками. Флаг HTTP-only cookies не разрешает получить доступ к файлам cookie или модифицировать их, что снижает риск XSS-атак.
  • Set Proper Cookie Attributes: при создании файлов cookie установите соответствующие атрибуты, такие как флаги «SameSite» и «Secure». Атрибут «SameSite» ограничивает область действия файла cookie одним и тем же источником сайта, снижая риски на проведение атаки типа cross-site request forgery (CSRF). Атрибут «Secure» гарантирует, что файлы cookie передаются только через соединения HTTPS.
  • Use Session Tokens with Sufficient Entropy: создавайте сессионные токены с достаточным количеством энтропии (случайность). Более длинные и сложные токены затрудняют их предугадывание или подбор злоумышленниками.
  • Regenerate Session Tokens on Privilege Level Change: каждый раз, когда пользователь меняет свой уровень привилегий, например, во время входа в систему, выхода из системы или переключения ролей, повторно генерируется сессионный токен. Эта практика помогает предотвратить session fixation attacks.
  • Implement Session Expiry and Inactivity Timeout: определите соответствующий timeout сессии и timeout бездействия, чтобы автоматически аннулировать сессии после периода бездействия или когда сессия достигает своего максимального срока.
  • Implement Strict Referer-Policy: установите строгую Reffer-Policy, чтобы предотвратить утечку Reffer header. Это поможет избежать непреднамеренного раскрытия конфиденциальной информации, включая токены сеанса, через HTTP Reffer header.
  • Test for Security Vulnerabilities: регулярно проводите тестирование безопасности, включая проверку кода, оценку уязвимостей и тестирование на проникновение, для выявления и устранения любых потенциальных проблем, связанных с управлением сеансами
  • Stay Informed About Security Best Practices: следуйте рекомендациям по безопасности и передовым практикам, связанных с управлением сеансами и безопасностью веб-приложений.

Пример сохранения сессионного токена в файле cookie с помощью Node.js:

Пример сохранения сессионного токена в файле cookie с помощью Node.js
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
app.use(cookieParser());
app.get('/login', (req, res) => {
// Generate a new session token
const sessionToken = generateSessionToken();
// Store the session token in a cookie
res.cookie('sessionToken', sessionToken, {
httpOnly: true,
secure: true,
sameSite: 'strict'
});
res.send('Login successful');
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});

Additional:#