Ограничение доступа с помощью секретного ключа позволяет защитить ваши 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
Ограничение Доступа по HTTP referer
Ограничение Доступа По Списку Стран
Ограничение Доступа По IP-адресу или Диапазону Адресов