Ограничение доступа с помощью секретного ключа

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

Для ограничения доступа к ресурсам CDN-зоны по секретному ключу вам необходимо выполнить настройки CDN-зоны в панели управления UCDN, а также использовать в вашем коде специальный алгоритм генерации ссылок к CDN-ресурсам.


Настройка CDN-зоны:

1. Войдите в панель управления Universal CDN по адресу my.ucdn.com;

2. Откройте раздел My Zones в верхнем левом углу;

3. Нажмите на значок шестеренки у той CDN-зоны, доступ к которой хотите ограничить;

4. Откройте раздел Limit Access;

5. Прокрутите страницу вниз до пункта Limit access using secret key и установите галочку возле него;

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

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

Генерация защищенных ссылок


Для запросов к защищенным ресурсам клиент должен использовать в HTTP-запросе (в URL для GET-запросов) два обязательных параметра: cdn_hash и cdn_creation_time.


В случае отсутствия или неправильно рассчитанного значения cdn_hash, клиенту будет возвращена ошибка HTTP 405 «Method Not Allowed».


Обязательные параметры запроса
:

cdn_hash

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

Следующий PHP-код иллюстрирует алгоритм для вычисления значения cdn_hash:

cdn_hash:

$cdn_hash=md5(
$request_path
$cdn_hash = md5(
     $request_path
    .$secret_key
    .$cdn_creation_time
    .$cdn_ttl
    .$cdn_net
    .$cdn_bw
    .$cdn_bw_fs
    .$cdn_cv_user_id
);

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

Пример значения:

cdn_hash=f1485ee14fb9a05b288836b5f61d071e


cdn_creation_time

Параметр задает время жизни защищенной ссылки в секундах. Значение, заданное через параметр HTTP-запроса, имеет более высокий приоритет, чем значение, заданное в панели управления.

Пример:

cdn_creation_time=1601038498


Опциональные параметры запроса:

cdn_ttl 

Параметр задает время жизни защищенной ссылки в секундах. Значение, заданное через параметр HTTP-запроса, имеет более высокий приоритет, чем значение, заданное в панели управления.

Пример:


cdn_ttl=86400


cdn_net 

Параметр задает IP-адрес или IP-сеть, из которой разрешен доступ к ресурсу. Сети указываются в CIDR-нотации, но слэш перед размером сети должен быть заменен на точку. Например, 209.58.157.0.24 будет трактоваться как 209.58.157.0/24.

Пример:

cdn_net=209.58.157.0.24


cdn_bw
 

Параметр задает ограничение скорости отдачи ресурса в байтах в секунду.

Пример, устанавливающий ограничение в 1Кб/с:

cdn_bw=10240


cdn_bw_fs 

Параметр задает объем данных, которые будут отданы без ограничения скорости. Суффиксы «k», «m» и «g» позволяют задать объём в килобайтах, мегабайтах и гигабайтах, соответственно. Этот параметр следует использовать вместе с параметром cdn_bw, который устанавливает ограничение на скорость загрузки после исчерпания лимита передачи данных на полной скорости.

Пример, устанавливающий ограничение в 10 мегабайт:

cdn_bw_fs=10m


cdn_cv_
<user_defined_name> 

The cdn_cv_ prefix allows adding a custom parameter. It needs to be added as described below: 

cdn_cv_user_id=1997

Префикс для задания собственных параметров. Где cdn_cv_ является неотъемлемой частью параметра – ее нельзя изменить или опустить, <user_defined_name> – это настраиваемая часть параметра, ее можно изменить на любое нужное вам значение.

Пример, задающий параметр cdn_cv_user_id со значением 1997:

cdn_cv_user_id=1997


Пример использования ограничения по секретному ключу
:

Предположим, что у вас есть CDN-зона с CNAME равным test.example.com. В этой зоне есть ресурс «/video/example-video.mp4». Вы выбрали md5 в качестве алгоритма хэширования и установили секретный ключ равным «sfKlt1!54hF4_%».

Далее приводится простой PHP-скрипт, который позволяет генерировать защищенные ссылки.

<?php
$secret_key = '<place your secret key here>';

$request_path = '/video/example-video.mp4';

/* Current Unix timestamp */
$cdn_creation_time = time();

/* For how long the generated URL will be active in seconds */
$cdn_ttl = 86400;

/* Allow access only to specified ip address or IP network */
$cdn_net = "207.138.234.91";

/* Limit download speed to bytes per second (10KB) */
$cdn_bw = "10240";

/* The amount of data served at maximum speed MB */
$cdn_bw_fs = "10m";

/* Generating the hash */
$hash = md5($request_path . $secret_key . $cdn_creation_time . 
            $cdn_ttl . $cdn_net . $cdn_bw . $cdn_bw_fs);

/* Generating the URL with a secret key by concatenating host, path, and parameters */
$access_url = 'https://test.example.com'
    .$request_path
    .'?cdn_hash='.$hash
    .'&cdn_creation_time='.$cdn_creation_time
    .'&cdn_ttl='.$cdn_ttl
    .'&cdn_net='.$cdn_net
    .'&cdn_bw='.$cdn_bw
    .'&cdn_bw_fs='.$cdn_bw_fs;

echo $access_url . "\n";
?>


В результате работы скрипта будет отображен следующий URL:

https://test.example.com/video/example-video.mp4?cdn_hash=a2231dbf86c4017a62ce9cca0decd108&cdn_creation_time=1616488870&cdn_ttl=86400&cdn_net=207.138.234.91&cdn_bw=10240&cdn_bw_fs=10m


Добавление Новой CDN-Зоны

Ограничение Доступа по HTTP referer

Ограничение скорости загрузки

Ограничение Доступа По Списку Стран

Ограничение Доступа По IP-адресу или Диапазону Адресов

Ограничение Доступа к CDN-ресурсам

Управление Кэшированием

Работа Со Страницами Ошибок

Инструкции