模块 ngx_http_secure_link_module

secure_link
secure_link_md5
secure_link_secret
Embedded VariablesDirectives

ngx_http_secure_link_module模块 (0.7.18) 用于检查所请求链接的真实性, 保护资源免受未经授权的访问, 并限制链接生命周期。

通过比较 checksum 值,其值为 对于请求。 如果链接的生命周期有限且时间已过期, 该链接被视为已过期。 这些检查的状态在$secure_link变量。

该模块提供两种替代作模式。 第一种模式由 secure_link_secret Directives启用,用于检查所请求链接的真实性 以及保护资源免受未经授权的访问。 第二种模式 (0.8.50) 由 secure_linksecure_link_md5 Directives启用,也用于限制链接的生命周期。

这个模块不是默认构建的,它应该使用--with-http_secure_link_moduleconfiguration 参数。

Directives

语法: secure_link expression;
默认值:
上下文: http,server,location

定义一个包含变量的字符串,其中的 将提取链接的校验和值和生命周期。

expression通常相关 提出请求;请参阅下面的示例

将从字符串中提取的校验和值与 由 secure_link_md5 Directives定义的表达式的 MD5 哈希值。 如果校验和不同,则$secure_link变量 设置为空字符串。 如果校验和相同,则检查链接生命周期。 如果链接的生命周期有限且时间已过期, 这$secure_link变量设置为”0”. 否则,它被设置为 ”1”. 请求中传入的 MD5 哈希值以 base64url 编码。

如果链接的生命周期有限,则过期时间 以秒为单位设置,自 Epoch (Thu, 01 Jan 1970 00:00:00 GMT) 以来。 该值在 MD5 哈希值之后的表达式中指定。 ,并用逗号分隔。 请求中传递的过期时间可通过 这$secure_link_expires变量,以便在 secure_link_md5 Directives。 如果未指定过期时间,则链接具有 unlimited 辈子。

语法: secure_link_md5 expression;
默认值:
上下文: http,server,location

定义 MD5 哈希值将 进行计算并与请求中传递的值进行比较。

表达式应包含链接的受保护部分 (resource) 和一种秘密成分。 如果链接的生命周期有限,则 表达式还应包含$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。 该链接的有效期也有限,直到 2038 年 1 月 19 日(格林威治标准时间)。

在 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” 将在internal重定向到 “/secure/link”.

在 UNIX 上,此示例的哈希值可以通过以下方式获得:

echo -n 'linksecret' | openssl md5 -hex

嵌入变量

链接检查的状态。 具体值取决于所选的作模式。
在请求中传递的链接的生命周期; 仅用于 secure_link_md5 Directives。