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_linksecure_link_md5 指令启用,也用于限制链接的生命周期。

该模块不是默认构建的,应使用 --with-http_secure_link_module 配置参数启用。

指令

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

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

expression 中使用的变量通常与请求关联;请参阅下面的 示例

从字符串中提取的校验和值与由 secure_link_md5 指令定义的表达式的 MD5 散列值进行比较。如果校验和不同,则 $secure_link 变量设置为空字符串。如果校验和相同,则检查链接的生命周期。如果链接具有有限的生命周期且时间已过期,则 $secure_link 变量设置为“0”。否则,设置为“1”。在请求中传递的 MD5 散列值编码为 base64url

如果链接具有有限的生命周期,则过期时间设置为自纪元以来的秒数 (Thu, 01 Jan 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”链接限制了IP地址为127.0.0.1的客户端对“/s/link”的访问。该链接还具有到2038年1月19日(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

嵌入变量

The status of a link check. The specific value depends on the selected operation mode.
The lifetime of a link passed in a request; intended to be used only in the secure_link_md5 directive.