Сессии. Подробное описание работы и объяснение механизма

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

В недавнем обновлении Телеграмм кроме превью ссылок был создан новый раздел в настройках безопасности и конфиденциальности Telegram. Он называется «Активные сеансы».

В разделе содержится информация об IP-адресе пользователя Telegram и его активных сеансах. У каждого появляется возможность завершить неиспользуемые сеансы, как и те активные сессии, что кажутся подозрительными.

Авторизация в два этапа

Еще одно нововведение тоже касается раздела безопасности и конфиденциальности. Это авторизация в Телеграмм в два этапа (Двухэтапная авторизация).

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

Но с этим нужно быть осторожным: если созданный пароль будет утерян, владелец учетной записи не сможет войти в собственный аккаунт Telegram с другого гаджета.

  • настроить возможность восстановления пароля через почту;

Раздел Активные сессии на странице «Настройки безопасности» показывает список последних случаев доступа к Вашей учетной записи на Facebook .

Каждая запись содержит дату и время входа в систему, примерное местоположение из которого происходила авторизация, и тип устройства, используемого для входа в аккаунт . Справа от каждой записи появится также возможность завершения сеанса.

Примечание : Указывается местоположение определяемое на основе IP-адреса, с которого был получен доступ к учетной записи. Если вы хотите узнать точные данные, касающиеся IP-адреса входа в систему, просто установите указатель мыши над информацией о местоположении сессии.

Что значит ситуация, когда я не узнаю места входа

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

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

Пароль приложения Facebook

Что такое пароль для приложений

Пароль к приложению, это одноразовые пароли, которые используются для входа в программу. Использование паролей для приложений поможет в обеспечении безопасности Facebook.

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

Чтобы получить пароль к приложению:

Подтверждение входа на Facebook

Что такое функция подтверждения входа в систему

Подтверждение входа в систему – это дополнительная защита аккаунта Facebook, связанная с функцией Уведомление о входе , но с дополнительным этапом процедуры безопасности.

После включения подтверждения входа в систему при каждой попытке получения доступа к учетной записи на Facebook с неопознанного компьютера или мобильного устройства, возможно, потребуется ввести код для входа в систему.

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

Чтобы включить функцию подтверждения входа в систему:


Примечание :Чтобы иметь возможность включить Подтверждение входа необходимо сохранить в данных счета номер телефона .

Как закрыть доступ к Facebook без кода

Если вы не хотите, чтобы любой человек имел возможность войти в ваш аккаунт с любого места, вы можете включить Подтверждение регистрации .

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

Что будет если я попытаюсь зайти с другого компьютера

Когда вы попытаетесь войти в систему с неопознанного устройства, появится сообщение с просьбой ввести код для входа в систему.

Если вы установили приложение Генератор кодов, откройте приложение Facebook для Android и получите код.

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

Как получить код подтверждения

Если вы включили Подтверждение входа , вы получите сообщение SMS с кодом входа в систему каждый раз, когда он вам понадобится. Если же вы используете приложение для Android, вы можете скачать программу Генератор кодов.

Мне вводить код при каждом входе в систему

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

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

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

Сессия (от лат. — sessio - заседание, англ. — session) – это промежуток времени, охватывающий работу пользователя в интернете с момента открытия первой и до последней ссылок. Рассчитывается как разница во времени между начальным и финальным запросами. Однако последняя страница может просматриваться пользователем различное время, из чего, следовательно, измерение времени между двумя запросами становится более затруднительным.

Как связана сессия с протоколом HTTP и COOKIES

Что такое сессия можно объяснить, отталкиваясь от протокола HTTP. Сам по себе, этот протокол не располагает способом сохранения состояния между двумя операциями. Т.е., проще говоря, открывая одну страничку, а затем, перейдя с неё на другую, HTTP не сможет установить, что оба запроса принадлежат одному пользователю. И тут на помощь приходит особый метод отслеживания – управление сеансами (нашими сессиями).
Отсюда, отвечая на вопрос, что такое сессия, можно сказать, что это – вспомогательный логический объект, способствующий передачи данных между последовательными HTTP — запросами от одного юзера.
Cookies, как и сессия, хранят сведения о пользователе во время его перемещения по разным страницам и улучшают работу протокола. Но в отличие от второй, где данные хранятся во временных файлах на сервере, они сохраняют их на компьютере пользователя в виде небольших фрагментов.

Для чего нужны сессии

Использование сессий становится незаменимым при работе с такими сайтами, как форумы, доски объявлений и Интернет – магазины, ведь в этом случае нужно сохранять данные о юзере на протяжении нескольких страниц.

Этапы сессии

Всю сессию можно разделить на три этапа:

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

Из-за того, что данные сессии сохраняются на стороннем сервере, то лучше всего не держать большие объемы информации в них, а использовать cookies.

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

Оценка важности данных, передаваемых в рамках сессии, важна для выбора мер по защите этой информации; все имеет свою цену и обычно дополнительные меры защиты приводят к ухудшению удобства для конечного пользователя. Например, если необходимо защитить пользователя от простейших методов социальной инженерии, следует включить session.use_only_cookies . В данном случае со стороны пользовательского ПО обязательна поддержка cookie, иначе механизм сессий не будет работать.

Существует несколько способов утечки существующего идентификатора сессии третьим лицам. Например инъекции JavaScript, передача идентификатора сесии в URL, перехват пакетов, физический доступ к устройству и т.д. Перехваченный идентификатор сессии позволит третьим лицам получить доступ ко всем ресурсам, связанным с данной сессией. Во-первых, передача идентификатора сессии в URL. При переходе на внешний сайт идентификатор сессии пользователя и адрес ресурса могут попасть в статистику переходов данного сайта. Во-вторых, при более активной атаке возможно прослушивание сетевого трафика злоумышленником. Если канал передачи данных не зашифрован, идентификаторы сессии будут переданы в виде простого текста. В таком случае решением является обязательное использование SSL/TLS пользователями при доступе к сайту. Для этих целей следует применять HSTS.

Замечание : Даже HTTPS иногда может не защитить конфиденциальные данные. Например, уязвимости типа CRIME, BEAST могут позволить злоумышленнику получить доступ к данным. Многие сети используют прокси HTTPS MITM для аудита. Атакующие также могут настроить такие прокси.

Неадаптивное управление сессиями

В настоящее время PHP использует адаптивное управление сессиями по умолчанию. Адаптивное управление сессиями несет дополнительные риски.

С версии PHP 5.5.2 доступна опция session.use_strict_mode . При её включении и при условии, что обработчик сохранения сессий её поддерживает, неинициализированный сессионный ID отвергается и создается новый. Это защищает от атак, которые принуждают пользователя использовать заранее извесный ID. Ататкующий может размещать ссылки или отправлять письма, которые содержат сессионный ID. Например http://example.com/page.php?PHPSESSID=123456789 . Если опция session.use_trans_sid включена, то жертва откроет сессию с этим идентификатором. Опция session.use_strict_mode уменьшает этот риск.

Внимание

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

Cookie с сессионным ID должна устанавливаться с указанием параметров domain, path, httponly, secure и, начиная с PHP 7.3, аттрибут SameSite. Их приоритетность определяется браузерами. Опираясь на эту приоритетность, атакующий может может установить сессионный ID, который будет использоваться бесконечно. Применение session.use_only_cookies не решает эту проблему. session.use_strict_mode уменьшает риск. session.use_strict_mode =On, не допускает использование неинициализированных сессионных ID.

Замечание : Даже при уменьшении риска с помощью session.use_strict_mode атакующий все ещё может заставить пользователя использовать уже инициализированную сессию, созданную атакующим. Например JavaScript-инъекция. Эта атака может быть смягчена, если следовать рекомендациям этого руководства. Если вы следуете этому руководству, вы должны включить session.use_strict_mode , использовать управление сессиями на основе временных меток и пересоздавать идентификатор сессии с помощью session_regenerate_id() , как рекомендуется. Если вы всё это сделаете, идентификатор сессии злоумышленника в итоге будет удален. Если произошел доступ к истекшей сессией, вы должны сохранить все данные активных сессий пользователя. Это позволит для дальнейшего расследования причин произошедшего. После этого, принудительно заставьте пользователя выйти из всех активных сессий, то есть потребуйте от пользователей переавторизации. Это позволит предотвратить атаку с использованием краденной сессии.

Внимание

Доступ к истекшей сессии не всегда означает атаку. Нестабильное сетевое соединение и/или немедленное удаление активной сессии может повлечь за собой подобное поведение.

С PHP 7.1.0 добавлена функция session_create_id() . Эта функция может быть полезна для создания идентификатора сессии с использованием идентификатора пользователя в качестве префикса для достижения большей управляемости. При её использовании крайне важно разрешать session.use_strict_mode . В противном случае недобросовестные пользователи смогут устанавливать поддельные идентификаторы сессий для других пользователей.

Замечание : В версиях PHP до 7.1.0 необходимо использовать CSPRNG, то есть /dev/urandom или random_bytes() и функции хеширования для генерации нового идентификатора сессии. session_create_id() имеет встроенный функционал обнаружения коллизий и генерирует идентификатор основываясь на INI-настройках. Использование session_create_id() является предпочтительной практикой.

Пересоздание идентификатора сессии

Внимание

Для подобной настройки требуется включение session.use_strict_mode . Убедитесь, что эта опция включена, иначе база данных активных сессий может быть скомпрометирована.

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

Сессии и автоматический вход

Разработчики НЕ ДОЛЖНЫ использовать долгоживущие сессии для реализации автоматического входа в систему, потому что это резко повышает вероятность кражи сессии. Автоматический вход в систему должен реализовываться разработчиком самостоятельно.

Устанавливайте безопасные хешированные одноразовые ключи в качестве ключей автологина с помощью setcookie() . Используйте безопасное хеширование, посильнее чем SHA-2, например SHA-256 или выше со случайными данными из random_bytes() или /dev/urandom.

Если пользователь не авторизован, проверьте, корректен ли одноразовый ключ автологина. Если ключ корректен, авторизуйте пользователя и установите ему новый одноразовый ключ. Ключ автологина обязательно должен быть одноразовым, то есть никогда не используйте его повторно, а всегда создавайте новый.

Ключ автологина - это очень долгоживущий ключ авторизации. Его надо защищать по максимуму. Используйте параметры path/httponly/secure/SameSite при установке cookie для его защиты. Никогда не передавайте ключ автологина, кроме случаев, когда это необходимо.

Разработчик должен реализовать функционал, который отключает автоматический вход в систему и удаляет ненужные "cookie", установленные для его реализации.

CSRF (Межсайтовая подделка запроса)

output_add_rewrite_var() может быть использована для защиты от CSRF. Читайте руководство для подробностей.

Замечание : До PHP 7.2.0 использовался один и тот же буфер вывода и INI-настройки для "trans sid". Так что использование output_add_rewrite_var() с PHP более ранних версий не рекомендуется.

Многие фреймворки поддерживают защиту от CSRF. Обратитесь к документации своего фреймворка для более подробной информации.

Начиная с PHP 7.3, для сессионной cookie можно установить атрибут SameSite. Это обеспечит дополнительную защиту против CSRF.

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

В случае необходимости вы можете завершить сеанс работы выбранного пользователя.

Модуль «Активные сессии»

Просмотр информации о текущих подключениях

  • Id сессии - уникальный номер, идентифицирующий сеанс работы с панелью управления. По умолчанию информация отображается в таблице в течение 60 минут.
  • Пользователь - имя пользователя, подключенного к системе в настоящее время.
  • Доступ - уровень доступа данного пользователя к панели управления (например, суперпользователь, администратор сервера, пользователь и др.).
  • IP-адрес - удалённый IP-адрес, с которого осуществляется доступ.
  • Ожидание - время, прошедшее с момента, когда панель управления получила последнюю команду от пользователя.
  • Активных запросов - количество активных запросов.

Завершение сеанса

Чтобы завершить тот или иной сеанс работы с панелью управления, выделите нужные строки в списке активных сеансов и нажмите кнопку "Завершить".

Для предотвращения случайных удалений панель управления попросит подтвердить или отменить ваше действие. Если в окне подтверждения вы нажмёте "Ок", то выделенные сеансы будут завершены.

Если сеанс был завершен, для дальнейшей работы с панелью управления пользователь должен снова авторизоваться.

Эта форма - не обращение в поддержку.
Мы не можем идентифицировать вас и ответить на ваше сообщение.



 

Пожалуйста, поделитесь этим материалом в социальных сетях, если он оказался полезен!