Nginx

ngx_http_secure_link_module

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_link和secure_link_md5指令启用,也用于限制链接的生存期。

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

指令

句法:secure_link表达式;
默认:
语境:http,服务器,位置

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

一个 expression中使用的变量通常与请求相关联; 看下面的例子。

从字符串中提取的校验和值与由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表达式;
默认:
语境:http,服务器,位置

定义一个表达式,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”链接限制/s/linkIP地址为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;
默认:
语境:位置

定义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指令中使用。