Skip to main content

V3.3.2 Session Termination

Requirement:#

If authenticators permit users to remain logged in, verify that re-authentication occurs periodically both when actively used or after an idle period. (C6)

Explanation:#

Раскрытие, захват, предсказание, перебор или фиксация идентификатора сеанса приведет к атакам захвата сеанса (или бокового захвата), когда злоумышленник может полностью выдать себя за пользователя-жертву в веб-приложении. Злоумышленники могут выполнять два типа атак с перехватом сеанса: целевые или общие. При целенаправленной атаке цель злоумышленника — выдать себя за определенного (или привилегированного) пользователя-жертву веб-приложения. Для общих атак цель злоумышленника — выдать себя за любого действительного или законного пользователя в веб-приложении.

Remediation:#

Один из способов обеспечить периодическую повторную аутентификацию в приложении — установить тайм-аут для сеанса и проверить, не был ли пользователь неактивен в течение определенного времени. В этом случае пользователю потребуется повторно пройти аутентификацию, чтобы продолжить использование приложения.

<?php
session_start();
// Set a timeout for the session
$inactive = 3600;
// Check if the user has been inactive for the specified amount of time
if (isset($_SESSION['timeout']) && time() - $_SESSION['timeout'] > $inactive) {
// Unset the session variables and destroy the session
session_unset();
session_destroy();
// Redirect the user to the login page
header("Location: login.php");
exit;
}
// Update the session timeout value
$_SESSION['timeout'] = time();
// Continue with the rest of the application code

Этот код запускает сеанс, устанавливает значение времени ожидания 3600 секунд (1 час) и проверяет, был ли пользователь неактивен в течение этого времени. Если это так, переменные сеанса сбрасываются, сеанс уничтожается, а пользователь перенаправляется на страницу входа. Если пользователь все еще активен, значение времени ожидания сеанса обновляется до текущего времени.

Additional:#

https://www.php.net/manual/ru/features.session.security.management.php

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