模块 ngx_http_secure_link_module
secure_link secure_link_md5 secure_link_secret Embedded Variables 的Directives |
模块 (0.7.18)
用于检查所请求链接的真实性,
保护资源免受未经授权的访问,
并限制链接生命周期。ngx_http_secure_link_module
通过比较
checksum 值,其值为
对于请求。
如果链接的生命周期有限且时间已过期,
该链接被视为已过期。
这些检查的状态在变量中可用。$secure_link
该模块提供两种替代作模式。 第一种模式由 secure_link_secret Directives启用,用于检查所请求链接的真实性 以及保护资源免受未经授权的访问。 第二种模式 (0.8.50) 由 secure_link 和 secure_link_md5 Directives启用,也用于限制链接的生命周期。
默认情况下,此模块不是构建的,应使用 configuration 参数启用它。--with-http_secure_link_module
Directives
语法: |
secure_link |
---|---|
默认值: | — |
上下文: |
http , ,server location |
定义一个包含变量的字符串,其中的 将提取链接的校验和值和生命周期。
中使用的变量通常是关联的
提出请求;请参阅下面的示例。expression
将从字符串中提取的校验和值与
由 secure_link_md5 Directives定义的表达式的 MD5 哈希值。
如果校验和不同,则变量
设置为空字符串。
如果校验和相同,则检查链接生命周期。
如果链接的生命周期有限且时间已过期,
该变量设置为 “”。
否则,它设置为 “”。
请求中传入的 MD5 哈希值以 base64url 编码。$secure_link
$secure_link
0
1
如果链接的生命周期有限,则过期时间
以秒为单位设置,自 Epoch (Thu, 01 Jan 1970 00:00:00 GMT) 以来。
该值在 MD5 哈希值之后的表达式中指定。
,并用逗号分隔。
请求中传递的过期时间可通过
变量,用于
secure_link_md5 Directives。
如果未指定过期时间,则链接具有 unlimited
辈子。$secure_link_expires
语法: |
secure_link_md5 |
---|---|
默认值: | — |
上下文: |
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; } ... }
这
“”
链接
使用
IP 地址 127.0.0.1。
该链接的有效期也有限,直到 2038 年 1 月 19 日(格林威治标准时间)。/s/link?md5=_e4Nc3iduzkWRm01TBBNYw&expires=2147483647
/s/link
在 UNIX 上,请求参数值可以通过以下方式获取:md5
echo -n '2147483647/s/link127.0.0.1 secret' | \ openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =
语法: |
secure_link_secret |
---|---|
默认值: | — |
上下文: |
location |
定义用于检查真实性的密钥
请求的链接。word
请求链接的完整 URI 如下所示:
/prefix
/hash
/link
其中 是
为链接和密字的串联计算的 MD5 哈希值,
并且是没有斜杠的任意字符串。hash
prefix
如果请求的链接通过了真实性检查,
变量设置为链接
从请求 URI 中提取。
否则,变量
设置为空字符串。$secure_link
$secure_link
例:
location /p/ { secure_link_secret secret; if ($secure_link = "") { return 403; } rewrite ^ /secure/$secure_link; } location /secure/ { internal; }
请求 “”
将在internal重定向到
“”./p/5e814704a28d9bc1914ff19fa0c4a00a/link
/secure/link
在 UNIX 上,此示例的哈希值可以通过以下方式获得:
echo -n 'linksecret' | openssl md5 -hex
嵌入变量
$secure_link
- 链接检查的状态。 具体值取决于所选的作模式。
$secure_link_expires
- 在请求中传递的链接的生命周期; 仅用于 secure_link_md5 Directives。