Secure Link#
Позволяет проверять аутентичность запрашиваемых ссылок, защищать ресурсы от несанкционированного доступа, а также ограничивать срок действия ссылок.
Правильность запрашиваемой ссылки проверяется сравнением переданного в запросе значения контрольной суммы со значением, вычисляемым для запроса. Если ссылка имеет ограниченный срок действия и он истек, ссылка считается устаревшей. Результат этих проверок делается доступным в переменной $secure_link.
Модуль реализует два альтернативных режима работы. В первом режиме, который включается директивой secure_link_secret, можно проверить аутентичность запрашиваемых ссылок и защитить их от несанкционированного доступа. Второй режим включается директивами secure_link и secure_link_md5, и позволяет также ограничить срок действия ссылок.
При сборке из исходного кода модуль не собирается по умолчанию; его необходимо
включить с помощью параметра сборки
‑‑with‑http_secure_link_module
.
В пакетах и образах из
наших репозиториев
модуль включен в сборку.
Директивы#
secure_link#
Задает строку с переменными, из которой будет выделено значение контрольной суммы и время действия ссылки.
Используемые в выражении переменные обычно связаны с запросом; см. пример ниже.
Выделенное из строки значение контрольной суммы сравнивается со значением MD5-хэша, вычисляемым для выражения, заданного директивой secure_link_md5.
Если контрольные суммы не совпадают, значением переменной $secure_link становится пустая строка. Если контрольные суммы совпадают, проверяется время действия ссылки.
Если срок действия ссылки задан и истек, переменная $secure_link получает значение 0
. В противном случае она получает значение 1
. Значение MD5-хэш передается в запросе закодированным в base64url.
Если ссылка имеет ограниченный срок действия, время ее действия задается в секундах с начала эпохи (1 января 1970 года 00:00:00 GMT). Значение указывается в выражении после MD5-хэша и отделяется от него запятой. Время действия ссылки, переданное в запросе, делается доступным в переменной $secure_link_expires для использования в директиве secure_link_md5. Если время действия ссылки не задано, ссылка имеет неограниченный срок действия.
secure_link_md5#
Задает выражение, для которого считается значение MD5-хэш, сравниваемое с переданным в запросе.
Выражение должно содержать защищаемую часть ссылки (ресурс) и секретную составляющую. Если ссылка имеет ограниченный срок действия, выражение также должно содержать $secure_link_expires.
Для предотвращения несанкционированного доступа выражение может содержать информацию о клиенте, например, его адрес и версию браузера.
Пример:
location /s/ {
secure_link $arg_md5,$arg_expires;
secure_link_md5 "$secure_link_expires$uri$remote_addr secret";
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 410;
}
# ...
}
Ссылка "/s/link?md5=_e4Nc3iduzkWRm01TBBNYw&expires=2147483647" ограничивает доступ к "/s/link" для клиента с IP-адресом 127.0.0.1. Ссылка также имеет ограниченный срок действия до 19 января 2038 года (GMT).
Значение аргумента запроса md5 на UNIX можно получить так:
echo -n '2147483647/s/link127.0.0.1 secret' | \
openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =
secure_link_secret#
Задает секретное слово для проверки аутентичности запрашиваемых ссылок.
Полный URI запрашиваемой ссылки выглядит так:
/префикс/хэш/ссылка
где хэш — MD5-хэш в шестнадцатеричном виде, вычисленный для конкатенации ссылки и секретного слова, а префикс — произвольная строка без косых черт.
Если запрашиваемая ссылка проходит проверку на аутентичность, значением переменной $secure_link становится ссылка, выделенная из URI запроса. В противном случае значением переменной $secure_link становится пустая строка.
Пример:
location /p/ {
secure_link_secret secret;
if ($secure_link = "") {
return 403;
}
rewrite ^ /secure/$secure_link;
}
location /secure/ {
internal;
}
По запросу "/p/5e814704a28d9bc1914ff19fa0c4a00a/link" будет выполнено внутреннее перенаправление на "/secure/link".
Значение хэша для данного примера на UNIX можно получить так:
echo -n 'linksecret' | openssl md5 -hex
Встроенные переменные#
$secure_link
#
Результат проверки ссылки. Конкретное значение зависит от выбранного режима работы.
$secure_link_expires
#
Время действия ссылки, переданное в запросе. Предназначено исключительно для использования в директиве secure_link_md5.