Skip to content

Ограничение количества сессий на пользователя (защита от кражи)

Ограничение сессий

Для того, чтобы любой Ваш пользователь, получивший доступ к потокам, не устроил полное зеркалирование на свой сервер (например, с целью дальнейшей перепродажи), во Flussonic Media Server есть возможность ограничить количество одновременно просматриваемых потоков.

Таким образом, даже получив доступ ко всем потокам, пользователь сможет просматривать одновременно лишь N потоков, а попытки зеркалировать все потоки ни к чему не приведут.

Ограничение накладывается на каждого пользователя, который имеет свой UserId и задаётся с помощью авторизации.

Детали

Для того чтобы ограничить количество сессий до 2, нужно в авторизационном бэкенде отдавать следующие заголовки:

X-UserId: some-user-id
X-Max-Sessions: 2

А через lua-бэкенд поля user_id и max_sessions соответственно.

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

Бан

После того как сессия была забанена, любые попытки переоткрыть её в течении X-AuthDuration будут отклонены Flussonic Media Server.

Таким образом, если указать X-AuthDuration: 3600 и открыть лишний поток, то после блокировки этот поток нельзя будет открыть, используя старый токен в течении часа.

После того как сессия будет заблокирована на очередной запрос HLS-плейлиста клиент получит ответ 403 Forbidden. В случае же с RTSP, RTMP, HTTP MPEG-TS сокет будет просто молча закрыт.

Каждая заблокированная сессия сопровождается записью в лог, например:

14:58:51.598 <0.391.0> [stream-name] session_limiter:174 Ban session_id: <<"604551981e3e787b897afbaf35bb9f4d168d70b9">> for user_id: <<"8471796306">> and token: <<"5cfb82ecaf56ebfe7ac32a9020c86ef1d231d49e">> due to exceeded session limit

Мягкое ограничивание

Некоторые Middleware не могут генерировать новый токен на каждый запрос HLS-потока. При переключении между потоками это может создать проблемы, так как сессии на старых потоках будут помечены как лишние и будут заблокированы.

Специально для этих случаев во Flussonic Media Server есть механизм мягкого ограничения сессий.

Иногда блокировка не происходит в первую проверку, необходимо время, чтобы понять, что все сессии действительно используются. Тогда она происходит во вторую или третью волны. Таким образом, после появления лишних сессий, они обычно блокируются через 30-90 секунд.

Для того, чтобы включить этот режим, необходимо указать параметр soft_limitation=true к опции on_play, например:

stream foobar {
  on_play http://FLUSSONIC-IP:8081/my_auth_script.php soft_limitation=true;
}

Опцию soft_limitation также можно установить в пользовательском интерфейсе на странице Conifg > Auth:

Soft limitation

X-Unique: true

Заголовок X-Unique считается устаревшим, вместо него предполагается использовать X-Max-Sessions описанный выше.

X-UserId: some-id
X-Unique: true

Эквивалентно:

X-UserId: some-id
X-Max-Sessions: 1

Кроме того, если указаны и X-Max-Sessions и X-Unique, то приоритет отдаётся X-Max-Sessions. Таким образом:

X-UserId: some-id
X-Max-Sessions: 5
X-Unique: true

Эквивалентно:

X-UserId: some-id
X-Max-Sessions: 5