Spec-Zone.ru › nginx

Модуль 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 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API