nginx(四十九)使用referer模块和secure_link模块提供变量防盗链

一  referer模块

小结: referer模块可以'进行防盗链',但这种防盗链方式比较'脆弱',可以通过'伪造值'来绕过防盗链

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第1张图片

Referer请求头    Referrer-Policy响应头

默认:浏览器会在'特定场景'的跳转自动添加Referer请求头

备注:其它如'curl、postman'方式不会主动添加,但是可以'伪造'Referer请求头

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第2张图片

二  secure_link模块

①   概述

类比: 这个的原理是生成一个'下载的 token',用户访问的时候 nginx 来'验证这个 token'

场景: 检查'请求链接的权限(access)'以及'是否过期',多用于'下载服务器'防盗链

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第3张图片

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第4张图片

②   secure_link

语法: secure_link md5_hash[,expiration_time]

细节: 'expiration_time'是可选的

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第5张图片

1)使用secure_link定义一段'包含了变量的字符串',从中获取'校验和的值'和'url链接的生命周期'

细节点:'变量'常见来自'查询参数(arg_name)'或'请求头(http_head)'

2)字符串中的'校验和的值'会和'secure_link_md5'中的指定参数的'md5 哈希值'进行对比

3)如果两个值不一致,$secure_link变量值会被'设置为空串'

4)如果一致,才会检查'链接的生命周期'

  [1]、如果链接'设置有'时效性,检查发现'过期',$secure_link变量值为'0'

  [2]、'没有'过期,$secure_link变量值则为'1'

  [3]、如果'没有设置过期时间',则链接'永久'有效

重点: 先检查'md5 hash'是否匹配、再检查'life_time'是否过期

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第6张图片

③   secure_link_md5

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第7张图片

④  方式一

1)'secure_link' + 'secure_link_md5' 指令配合

2)用$secure_link'检验'结果

$secure_link的返回值规则:验证不通过是'空'、过期是'0'、通过是'1'

 (1) 官方案例

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第8张图片

tr命令 openssl md5 openssl base64

(2)解读

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第9张图片

 (3)实操

1)nginx配置

重点: nginx只需要知道'如何拼接(变量+字符串)'即可,因为'hash不可逆'

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第10张图片

2)生成hash摘要

关注点1: 要与'secure_link_md5'的格式一样

关注点2: 这个用'openssl'来模拟产生hash,生产级环境要'严谨的设计程序'生成

python获取自epoch的秒数 

++++++++++ '思考:生产环境谁产生hash摘要别嗯发送给客户端?' ++++++++++

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第11张图片

3)客户端发送请求测试

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第12张图片

⑤  secure_link_secret

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第13张图片

===============  /prefix/hash/link的'解读'  ===============

1)prefix'前缀'是非斜杠的任意的字符串

2)hash'哈希值'是link与密钥secret的MD5值

3)link'请求的路径'

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第14张图片

⑥  方式二

$secure_link的返回值规则:验证不通过是'空';通过则值为'资源路径'

(1)官方案例

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第15张图片

 (2)实操

1)原理

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第16张图片

2)生成md5

3)nginx部分配置

细节点: nginx事先'已经知道' word

补充: ^可以匹配上'任何url'

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第17张图片

4)客户端发送请求

机制: 

  1) nginx从url中取出'test.txt'并与nginx中的配置的'word'生成一个新的'md5_hash'

  2) 然后与请求中传递的'md5_hash'做比较

⑦   内置变量 

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第18张图片

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第19张图片

⑧   思考1

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第20张图片

⑨  思考2

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第21张图片

⑩  思考3

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第22张图片

⑪  思考4

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第23张图片

nginx(四十九)使用referer模块和secure_link模块提供变量防盗链_第24张图片

后续: 收集'计算机相关'词汇  -->'目的':看英文文档

你可能感兴趣的:(nginx,nginx,运维)