模块 ngx_http_secure_link_module
Directives secure_link secure_link_md5 secure_link_secret Embedded Variables |
该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 |
---|---|
默认: | — |
语境: |
http , server ,location |
定义一个带有变量的字符串,将从中提取链接的校验和值和生命周期。
中使用的变量expression
通常与请求相关联;请参见下面的示例。
将从字符串中提取的校验和值与
secure_link_md5指令定义的表达式的 MD5 哈希值进行比较。如果校验和不同,则该$secure_link
变量将设置为空字符串。如果校验和相同,则检查链路生命周期。如果链接有有限的生命周期并且时间已过期,则该$secure_link
变量设置为“ 0
”。否则,设置为“ 1
”。请求中传递的 MD5 哈希值以
base64url进行编码。
如果链接的生命周期有限,则过期时间将以纪元(1970 年 1 月 1 日星期四 00:00:00 GMT)以来的秒数为单位设置。该值在 MD5 哈希之后的表达式中指定,并以逗号分隔。请求中传递的过期时间可通过在secure_link_md5$secure_link_expires
指令中使用的变量获得。如果不指定过期时间,则链接的生命周期不受限制。
句法: |
secure_link_md5 |
---|---|
默认: | — |
语境: |
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; } ... }
“ ”链接限制IP 地址为 127.0.0.1 的客户端/s/link?md5=_e4Nc3iduzkWRm01TBBNYw&expires=2147483647
对“ ”的访问。/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 |
---|---|
默认: | — |
语境: |
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
嵌入变量
$secure_link
- 链接检查的状态。具体值取决于所选的操作模式。
$secure_link_expires
- 请求中传递的链接的生命周期;旨在仅在secure_link_md5指令中使用 。