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.
O módulo implementa dois modos de operação alternativos. O primeiro modo é habilitado pela diretiva 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 e secure_link_md5 e também permite limitar o tempo de vida dos links.
Ao compilar a partir do código fonte,
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.
Em pacotes e imagens dos nossos repositórios,
o módulo está incluído na compilação. 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 abaixo. O valor do checksum extraído da string é comparado com o valor hash MD5 da expressão definida pela diretiva secure_link_md5. Se os checksums não coincidirem, a variável $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 é definida como 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 para uso na diretiva secure_link_md5. Se o tempo de expiração não for especificado, um link tem tempo de vida ilimitado. 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. 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: 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: Define uma palavra secreta usada para verificar a autenticidade de links solicitados. A URI completa de um link solicitado se parece com o seguinte: 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 é definida como o link extraído da URI da requisição. Caso contrário, a variável $secure_link é definida como uma string vazia. Exemplo: 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: O status de uma verificação de link. O valor específico depende do modo de operação selecionado. O tempo de vida de um link passado em uma requisição; destinado a ser usado apenas na diretiva secure_link_md5.Diretivas#
secure_link#
0
. Caso contrário, ela é definida como 1
. O valor hash MD5 passado em uma requisição é codificado em base64url.secure_link_md5#
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;
}
# ...
}
echo -n '2147483647/s/link127.0.0.1 secret' | \
openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =
secure_link_secret#
/prefix/hash/link
location /p/ {
secure_link_secret secret;
if ($secure_link = "") {
return 403;
}
rewrite ^ /secure/$secure_link;
}
location /secure/ {
internal;
}
echo -n 'linksecret' | openssl md5 -hex
Variáveis Integradas#
$secure_link
#$secure_link_expires
#