четверг, 4 февраля 2016 г.

Защита от вставки прямых ссылок в Nimble Streamer

Команда WMSPanel уже несколько лет уделяет пристальное внимание безопасности живого вещания. Самая известная наша разработка в этой области, называемая "Защита от вставки прямых ссылок WMSAuth", уже реализована для Wowza Media Server и Windows Media Services.

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

Защита состоит из трех частей:
  1. Nimble Streamer; 
  2. фрагмента кода на веб-странице, который генерирует подпись для медиа-потока;
  3. интерфейса, контролирующего защиту. 

Эта цепочка защищает от повторной публикации ссылок, или так называемой "кражи ссылок".
Защита осуществляется в два шага. Необходимо:

  1. Изменить веб-страницу медиа-плеера, чтобы подписать URL медиа-данных; 
  2. Настроить защиту через WMSPanel. 

Остальное сделают Nimble Streamer и WMSPanel. Ниже приведена диаграмма потоков описываемого сценария.

Защита от публикации ссылок в Nimble Streamer.



1. Создание подписи к потокам


Чтобы подписать URL потока для дальнейшего управления им, веб-страница с медиа-плеером должна быть немного изменена.

Например, у вас такой URL живого потока:
http://stream.company.com:8081/vod/sample.mp4/playlist.m3u8

Измененный URL будет выглядеть так:
http://stream.company.com:8081/vod/sample.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NS80LzIwMTIgODozMzowNSBBTSZoYXNoX3ZhbHVlPXE3MjN6aEVmdGFUOUJoWjBQTmw1TVE9PSZ2YWxpZG1pbnV0ZXM9MjA2
Чтобы сгенерировать подпись, вам необходимо изменить исходники веб-страницы для включения туда фрагмента, подобного тому, что написан ниже на PHP:




<?php
$today = gmdate("n/j/Y g:i:s A");
$initial_url = "http://stream.company.com:8081/vod/sample.mp4/playlist.m3u8";
$ip = $_SERVER['REMOTE_ADDR'];
$key = "defaultpassword"; //this is also set up in WMSPanel rule
$validminutes = 20;

$str2hash = $ip . $key . $today . $validminutes;
$md5raw = md5($str2hash, true);
$base64hash = base64_encode($md5raw);
$urlsignature = "server_time=" . $today ."&hash_value=" . $base64hash. "&validminutes=$validminutes";
$base64urlsignature = base64_encode($urlsignature);

$signedurlwithvalidinterval = "$initial_url?wmsAuthSign=$base64urlsignature";
?>

"key" здесь означает пароль, который будет использован позднее для установки правил на панели управления. Параметры "validminutes" означают количество минут, в течение которых ссылка будет действительна. Это сделано для тех случаев, когда люди начинают воспроизведение спустя некоторое время после открытия страницы с медиа-плеером.

2. Настройки в панели управления


После того как код изменен на стороне веб-сервера, Nimble Streamer должен быть уведомлен о настройках защиты. Данная защита входит в состав функциональности WMSAuth в меню "Control" -> "WMSAuth paywall setup".

2.1 Группы WMSAuth


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


Список групп WMSAuth.


Назначение сервера в группу WMSAuth.

2.2 Правила WMSAuth


Внутри группы может быть несколько правил, каждое работает со своим набором сущностей. Просто нажмите на "Add rule", чтобы зайти на страницу создания правил. 

Вначале необходимо ввести имя правила, затем перейти к разделу под названием "Что вы хотите ограничить". На скриншотах показано, где вы можете указать регулярное выражение для приложения или потока. Поскольку мы используем один и тот же интерфейс управления WMSAuth и для Wowza, и для Nimble, вы можете видеть поле экземпляра приложения, неприменимое для Nimble. Его следует пропустить.

Virtual host применяется для указания доменного имени или хоста, используемого для доступа к медиа по своему URL. Таким образом, вы можете применить установки для определенного хоста в случае, если вам нужны различные правила для различных интерфейсов или хостов.

Указываем приложение или поток, защищаемые от копирования.

В последнюю очередь необходимо указать ключ (key), который был вставлен в медиа-подпись со стороны веб-сервера (см. раздел: "1. Создание подписи к потокам"). Параметр Time tolerance (временной допуск) позволяет установить максимальное отличие по времени между веб-сервером и медиа-сервером. В идеале они должны соответствовать, но если вы знаете, что они могут отличаться на несколько секунд, используйте данное поле для задания этой разницы во времени.

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

Теперь, когда правило защиты включено, поток защищен от несанкционированного копирования ссылок.


Для установки Nimble нужно воспользоваться этой простой процедурой.

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

Также вас может заинтересовать возможность защиты от вставки ссылок на основе имени потока, которая позволяет создать уникальную подпись для любого потока. Защита от вставки ссылок хорошо взаимодействует с системой оплаты за просмотр (Pay-per-view) в Nimble Streamer, которая позволяет создавать произвольные рабочие сценарии, основанные на подробной информации о потоках, передаваемой вашему приложению-обработчику в реальном времени.
Также техника защиты может быть использована в качестве замены блокировки по домену. Статья для ознакомления здесь.
Можно также блокировать просмотры по User-Agent в дополнение к защиты от прмых ссылок.

Также вы можете воспользоваться набором возможностей Nimble Streamer для транзмаксинга MPEG-TS и RTMP в HLS.

Если вам нужно больше защиты для HLS, попробуйте использовать шифрование AES-128 DRM, поддерживаемое Nimble.

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

Связанная документация


Nimble Streamer, Построение систем платного доступа для Nimble Streamer и WowzaHotlinking protection with stream-based signature, github code samples,

Комментариев нет:

Отправить комментарий