среда, 12 августа 2015 г.

Защита от вставки прямых ссылок в случае динамически меняющихся IP адресов



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

Довольно часто интернет-провайдер на стороне клиента обеспечивает доступ через прокси-сервер. В этом случае для настройки защиты от вставки прямых ссылок необходимо выделить IP адрес клиента из заголовков запроса к веб-серверу (более подробно про этот метод написано в статье "Using WMSAuth paywall with CloudFlare and other proxies" в нашем блоге).

В редких случаях интернет-провайдер меняет IP адрес клиента при каждом запросе к медиа серверу.  В такой ситуации медиа-сервер блокирует возможность просмотра видео, так как из-за разных IP адресов подписи URL медиа-данных не совпадают. В такой ситуации защита от вставки прямых ссылок будет блокировать просмотр видео для авторизованных пользователей.
Поэтому, чтобы защитить свой контент и в то же время дать возможность просматривать видео авторизованным пользователям можно использовать платформу платы за просмотр (Pay Per View), где в качестве параметра подписи URL медиа-данных вместо IP-адреса можно указать любой другой идентификатор пользователя, уникальный в пределах вашей сети вещания.

Подпись URL медиа данных генерируется следующим образом:

<?php
$today = gmdate("n/j/Y g:i:s A");
$initial_url = "rtsp://ec2-test-ip.compute.amazonaws.com:1935/live";
$video_url = "/Stream1";
$ip = $_SERVER['REMOTE_ADDR'];
$key = "defaultpassword";
$validminutes = 7;
$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" . $video_url;
?>

И зависит от параметра $ip, который создается на основе IP адреса зрителя. Если IP-адрес меняется в течение сессии, то медиа-сервер будет блокировать доступ к медиа-данным, т.к. запрос пользователя не пройдет проверку на стороне медиа-сервера.

Для PPV параметр $str2hash отличается тем, что вместо IP адреса используется идентификатор $id:

<?php
$today = gmdate("n/j/Y g:i:s A");
// URL of media we want to handle with pay-per-view
$initial_url = "http://video.wmspanel.com:8081/vod/sample.mp4/playlist.m3u8";
// client ID which is defined based on customer's database of users
$id = "5";
// A password entered in WMSAuth rule via web interface
$key = "defaultpassword";
// How long the link would be valid for start playback
$validminutes = 7;
$str2hash = $id . $key . $today . $validminutes;
$md5raw = md5($str2hash, true);
$base64hash = base64_encode($md5raw);
$urlsignature = 'server_time=' . $today . '&hash_value=' . $base64hash . '&validminutes=' . $validminutes . '&id=' . $id;
$base64urlsignature = base64_encode($urlsignature);
$signedurlwithvalidinterval = $initial_url . "?wmsAuthSign=$base64urlsignature";
?>

В качестве параметра-идентификатора ($id) может выступать логин (или e-mail) зарегистрированного пользователя, либо комбинация из логина, платформы (web, Android, iOS) и идентификатора устройства (хороший пример генерации параметра-идентификатора ($id) приведен в статье "The Paranoid’s Guide to Internet Video Streaming"). 

Для того, чтобы использовать функционал платформы оплаты за просмотр (PPV) необходимо создать собственный обработчик (handler), с которым будет синхронизироваться медиа-сервер для получения списка идентификаторов для которых необходимо заблокировать просмотр. Подробнее про настройку платформы платы за просмотр (PPV) и создание собственного обработчика (handler) можно посмотреть в статьях "Pay-per-view for Wowza Media Server" и "Pay-per-view for Nimble Streamer", а также в разделе "Контроль оплаты за просмотр для каждого пользователя" на сайте WMSPanel.com.


Технология отладки обработчика PPV описана в статье  "Debugging WMSPanel push API for pay-per-view and alerts".

При использовании техники защиты от вставки прямых ссылок (hotlinking protection) сам медиа-сервер принимает решения на основе IP-адреса о доступе для просмотра видео. При использовании PPV решение о том, каких пользователей нужно отключить, принимает обработчик на основе своей собственной бизнес-логики. После настройки обработчика PPV медиа-сервер будет посылать периодические запросы к обработчику (handler) на стороне вашего веб-сервера и получать в ответ список идентификаторов пользователей которых необходимо отключить от просмотра. 

Поскольку настройка PPV и написание собственного обработчика требует определённого времени, то можно использовать уже работающий код защиты от вставки прямых ссылок, при этом заменив параметр $ip на параметр-идентификатор ($id) при генерации подписи URL медиа-данных. Не забудьте включить этот идентификатор в подпись URL в явном виде ('&id=' . $id).

В таком случае ссылки на медиа-данные будут защищены от копирования. По крайней мере, если недобросовестный пользователь скопирует ссылку, подписанную с использованием параметра-идентификатора ($id), то она будет действительна для начала просмотра только в течении времени, указанного в параметре $validminutes. Можно ограничить применение такой проверки только для диапазона IP-адресов конкретного провайдера в настройках правил контроля доступа WMSAuth.

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

Сопутствующая документация


Защита от вставки прямых ссылокКонтроль платы за просмотр для каждого пользователяPay-per-view for Wowza Media ServerPay-per-view for Nimble StreamerUsing WMSAuth paywall with CloudFlare and other proxiesThe Paranoid’s Guide to Internet Video StreamingDebugging WMSPanel push API for pay-per-view and alerts, Hotlink protection with stream-based signature

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

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