Модуль ngx_http_secure_link_module
| Директивы secure_link secure_link_md5 secure_link_secret Встроенные переменные  | 
Модуль ngx_http_secure_link_module (0.7.18)
позволяет проверять аутентичность запрашиваемых ссылок,
защищать ресурсы от несанкционированного доступа,
а также ограничивать срок действия ссылок.
Правильность запрашиваемой ссылки проверяется сравнением переданного
в запросе значения контрольной суммы со значением,
вычисляемым для запроса.
Если ссылка имеет ограниченный срок действия и он истёк,
ссылка считается устаревшей.
Результат этих проверок делается доступным в переменной
$secure_link.
Модуль реализует два альтернативных режима работы. В первом режиме, который включается директивой secure_link_secret, можно проверить аутентичность запрашиваемых ссылок и защитить их от несанкционированного доступа. Второй режим (0.8.50) включается директивами secure_link и secure_link_md5, и позволяет также ограничить срок действия ссылок.
По умолчанию этот модуль не собирается, его сборку необходимо
разрешить с помощью конфигурационного параметра
--with-http_secure_link_module.
Директивы
| Синтаксис: | 
            secure_link  | 
                
|---|---|
| Умолчание: | — | 
| Контекст: | 
            http, server, location | 
                
Задаёт строку с переменными, из которой будет выделено значение контрольной суммы и время действия ссылки.
Используемые в выражении переменные обычно связаны с запросом; см. пример ниже.
Выделенное из строки значение контрольной суммы сравнивается со
значением 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  | 
                
|---|---|
| Умолчание: | — | 
| Контекст: | 
            http, server, location | 
                
Задаёт выражение, для которого считается значение 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  | 
                
|---|---|
| Умолчание: | — | 
| Контекст: | 
            location | 
                
Задаёт секретное слово для проверки аутентичности
запрашиваемых ссылок.
Полный 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.