ngx_http_secure_link_module 模块

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 指令

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

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

表达式中使用的变量通常与请求相关联;见下面的例子。

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

如果链接的生命周期有限,则过期时间设置为自 Epoch(1970 年 1 月 1 日星期四 00:00:00 GMT)以来的秒数。 该值在 MD5 哈希后的表达式中指定,并用逗号分隔。 请求中传递的到期时间可通过 $secure_link_expires 变量在 secure_link_md5 指令中使用。 如果未指定到期时间,则链接具有无限的生命周期。

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 日(格林威治标准时间)。

在 UNIX 上,可以通过以下方式获取 md5 请求参数值:

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

secure_link_secret 指令

语 法:secure_link_secret word;
默认值:—
上下文:location

定义用于检查请求链接的真实性的秘密词。

请求链接的完整 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 指令中使用。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号