<!-- review: finished -->

<a id="http-secure-link"></a>

# Secure Link

O módulo permite verificar a autenticidade de links solicitados, proteger recursos de acesso não autorizado e limitar o tempo de vida dos links.

A autenticidade de um link solicitado é verificada comparando o valor do checksum passado em uma requisição com o valor computado para a requisição. Se um link tem um tempo de vida limitado e o tempo expirou, o link é considerado desatualizado. O status dessas verificações é disponibilizado na variável [$secure_link](#v-secure-link).

O módulo implementa dois modos de operação alternativos. O primeiro modo é habilitado pela diretiva [secure_link_secret](#secure-link-secret) e permite verificar a autenticidade de links solicitados e protegê-los de acesso não autorizado. O segundo modo é habilitado pelas diretivas [secure_link](#id1) e [secure_link_md5](#secure-link-md5) e também permite limitar o tempo de vida dos links.

Ao [compilar a partir do código fonte](https://pt.angie.software//angie/docs/installation/sourcebuild.md#sourcebuild),
este módulo não é compilado por padrão;
ele deve ser habilitado com a
`‑‑with‑http_secure_link_module`
[opção de compilação](https://pt.angie.software//angie/docs/installation/sourcebuild.md#configure).

Em pacotes e imagens dos [nossos repositórios](https://pt.angie.software//angie/docs/installation/index.md#install-packages),
o módulo está incluído na compilação.

<a id="directives-41"></a>

## Diretivas

<a id="index-0"></a>

<a id="id1"></a>

### secure_link

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `secure_link` expression;   |
|-------------------------------------------------------------------------------------------|-----------------------------|
| Padrão                                                                                    | —                           |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location      |

Define uma string com variáveis das quais o valor do checksum e o tempo de vida de um link serão extraídos.

Variáveis usadas em uma expressão são geralmente associadas a uma requisição; veja [exemplo](#secure-link-md5) abaixo.

O valor do checksum extraído da string é comparado com o valor hash MD5 da expressão definida pela diretiva [secure_link_md5](#secure-link-md5).

Se os checksums não coincidirem, a variável [$secure_link](#v-secure-link) é definida como uma string vazia. Se os checksums coincidirem, o tempo de vida do link é verificado.

Se o link tem um tempo de vida limitado e o tempo expirou, a variável [$secure_link](#v-secure-link) é definida como `0`. Caso contrário, ela é definida como `1`. O valor hash MD5 passado em uma requisição é codificado em base64url.

Se um link tem um tempo de vida limitado, o tempo de expiração é definido em segundos desde a Época (1º de janeiro de 1970 00:00:00 GMT). O valor é especificado na expressão após o hash MD5, e é separado por uma vírgula. O tempo de expiração passado em uma requisição está disponível através da variável [$secure_link_expires](#v-secure-link-expires) para uso na diretiva [secure_link_md5](#secure-link-md5). Se o tempo de expiração não for especificado, um link tem tempo de vida ilimitado.

<a id="index-1"></a>

<a id="secure-link-md5"></a>

### secure_link_md5

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `secure_link_md5` expression;   |
|-------------------------------------------------------------------------------------------|---------------------------------|
| Padrão                                                                                    | —                               |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location          |

Define uma expressão para a qual o valor hash MD5 será computado e comparado com o valor passado em uma requisição.

A expressão deve conter a parte segura de um link (recurso) e um ingrediente secreto. Se o link tem um tempo de vida limitado, a expressão também deve conter [$secure_link_expires](#v-secure-link-expires).

Para prevenir acesso não autorizado, a expressão pode conter algumas informações sobre o cliente, como seu endereço e versão do navegador.

Exemplo:

```nginx
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;
    }

#    ...
}
```

O link "/s/link?md5=_e4Nc3iduzkWRm01TBBNYw&expires=2147483647" restringe o acesso a "/s/link" para o cliente com o endereço IP 127.0.0.1. O link também tem tempo de vida limitado até 19 de janeiro de 2038 (GMT).

No UNIX, o valor do argumento de requisição md5 pode ser obtido como:

```console
echo -n '2147483647/s/link127.0.0.1 secret' | \
   openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =
```

<a id="index-2"></a>

<a id="secure-link-secret"></a>

### secure_link_secret

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `secure_link_secret` word;   |
|-------------------------------------------------------------------------------------------|------------------------------|
| Padrão                                                                                    | —                            |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | location                     |

Define uma palavra secreta usada para verificar a autenticidade de links solicitados.

A URI completa de um link solicitado se parece com o seguinte:

```console
/prefix/hash/link
```

onde hash é uma representação hexadecimal do hash MD5 computado para a concatenação do link e palavra secreta, e prefix é uma string arbitrária sem barras.

Se o link solicitado passa na verificação de autenticidade, a variável [$secure_link](#v-secure-link) é definida como o link extraído da URI da requisição. Caso contrário, a variável [$secure_link](#v-secure-link) é definida como uma string vazia.

Exemplo:

```nginx
location /p/ {
    secure_link_secret secret;

    if ($secure_link = "") {
        return 403;
    }

    rewrite ^ /secure/$secure_link;
}

location /secure/ {
    internal;
}
```

Uma requisição de "/p/5e814704a28d9bc1914ff19fa0c4a00a/link" será redirecionada internamente para "/secure/link".

No UNIX, o valor hash para este exemplo pode ser obtido como:

```console
echo -n 'linksecret' | openssl md5 -hex
```

<a id="built-in-variables-9"></a>

## Variáveis Integradas

<a id="v-secure-link"></a>

### `$secure_link`

O status de uma verificação de link. O valor específico depende do modo de operação selecionado.

<a id="v-secure-link-expires"></a>

### `$secure_link_expires`

O tempo de vida de um link passado em uma requisição; destinado a ser usado apenas na diretiva [secure_link_md5](#secure-link-md5).
