Skip to main content

V3.3.3 Session Termination

Requirement:#

Verify that the application gives the option to terminate all other active sessions after a successful password change (including change via password reset/recovery), and that this is effective across the application, federated login (if present), and any relying parties.

Explanation:#

Переменные сеанса решают эту проблему, сохраняя информацию о пользователе, которая будет использоваться на нескольких страницах (например, имя пользователя, любимый цвет и т. д.). По умолчанию переменные сеанса сохраняются до тех пор, пока пользователь не закроет браузер.

Переменные сеанса содержат информацию об одном отдельном пользователе и доступны для всех страниц в одном приложении.

Remediation:#

Чтобы убедиться, что все другие активные сеансы завершаются после успешной смены пароля, вы можете реализовать следующее исправление:

  • Отслеживайте все активные сеансы пользователя. Эта информация может храниться в базе данных или в памяти, в зависимости от ваших требований.
  • Когда пользователь меняет свой пароль либо в процессе изменения пароля, либо в процессе сброса/восстановления пароля, все другие активные сеансы для этого пользователя становятся недействительными.
  • Для любого федеративного входа и проверяющих сторон убедитесь, что пользователь повторно аутентифицирован перед доступом к любым защищенным ресурсам. Это гарантирует, что любые активные сеансы с этими сущностями будут завершены.
Пример реализации на PHP
<?php
session_start();
// Connect to database
$conn = new mysqli('hostname', 'username', 'password', 'database');
// Handle password change request
if (isset($_POST['changePassword'])) {
$userId = $_SESSION['userId'];
$newPassword = password_hash($_POST['newPassword'], PASSWORD_DEFAULT);
// Update the password in the database
$stmt = $conn->prepare('UPDATE users SET password = ? WHERE id = ?');
$stmt->bind_param('si', $newPassword, $userId);
$stmt->execute();
// Invalidate all other active sessions for this user
$stmt = $conn->prepare('DELETE FROM sessions WHERE user_id = ?');
$stmt->bind_param('i', $userId);
$stmt->execute();
// Redirect to login page
header('Location: login.php');
exit;
}
?>

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

Additional:#

https://www.w3schools.com/php/php_sessions.asp