Модуль ngx_http_secure_link_module
Модуль 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 expression; |
|---|---|
| По умолчанию: | — |
| Контекст: | http, server, location |
Определяет строку с переменными, из которых будет извлечено значение контрольной суммы и срок действия ссылки.
Переменные, используемые в expression, обычно связаны с запросом; см. пример ниже.
Значение контрольной суммы, извлеченное из строки, сравнивается со значением MD5 хеша выражения, определенного директивой secure_link_md5. Если контрольные суммы разные, переменная $secure_link устанавливается в пустую строку. Если контрольные суммы одинаковые, проверяется срок действия ссылки. Если у ссылки ограничен срок действия, и срок действия истек, переменная $secure_link устанавливается в «0». В противном случае, она устанавливается в «1». Значение MD5 хеша, переданное в запросе, закодировано в base64url.
Если у ссылки ограничен срок действия, время истечения срока действия устанавливается в секундах с момента эпохи (Четверг, 01 Янв 1970 00:00:00 GMT). Значение указывается в выражении после значения MD5 хеша и отделяется запятой. Время истечения срока действия, переданное в запросе, доступно через переменную $secure_link_expires для использования в директиве secure_link_md5. Если время истечения срока действия не указано, у ссылки неограниченный срок действия.
| Синтаксис: | secure_link_md5 expression; |
|---|---|
| По умолчанию: | — |
| Контекст: | 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).
В системах UNIX значение аргумента запроса md5 можно получить следующим образом:
echo -n '2147483647/s/link127.0.0.1 secret' | \
openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =
| Синтаксис: | secure_link_secret word; |
|---|---|
| По умолчанию: | — |
| Контекст: | location |
Определяет секретный word используемый для проверки подлинности запрошенных ссылок.
Полный URI запрошенной ссылки выглядит следующим образом:
/prefix/hash/link
где hash является шестнадцатеричным представлением значения MD5 хеша, вычисленного для конкатенации ссылки и секретного слова, и prefix — произвольная строка без слешей.
Если запрошенная ссылка проходит проверку подлинности, переменная $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.
© 2002-2021 Igor Sysoev
© 2011-2024 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/http/ngx_http_secure_link_module.html