一 referer模块
小结: referer模块可以'进行防盗链',但这种防盗链方式比较'脆弱',可以通过'伪造值'来绕过防盗链
Referer请求头 Referrer-Policy响应头
默认:浏览器会在'特定场景'的跳转自动添加Referer请求头
备注:其它如'curl、postman'方式不会主动添加,但是可以'伪造'Referer请求头
二 secure_link模块
① 概述
类比: 这个的原理是生成一个'下载的 token',用户访问的时候 nginx 来'验证这个 token'
场景: 检查'请求链接的权限(access)'以及'是否过期',多用于'下载服务器'防盗链
② secure_link
语法: secure_link md5_hash[,expiration_time]
细节: 'expiration_time'是可选的
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'是否过期
③ secure_link_md5
④ 方式一
1)'secure_link' + 'secure_link_md5' 指令配合
2)用$secure_link'检验'结果
$secure_link的返回值规则:验证不通过是'空'、过期是'0'、通过是'1'
(1) 官方案例
tr命令 openssl md5 openssl base64
(2)解读
(3)实操
1)nginx配置
重点: nginx只需要知道'如何拼接(变量+字符串)'即可,因为'hash不可逆'
2)生成hash摘要
关注点1: 要与'secure_link_md5'的格式一样
关注点2: 这个用'openssl'来模拟产生hash,生产级环境要'严谨的设计程序'生成
python获取自epoch的秒数
++++++++++ '思考:生产环境谁产生hash摘要别嗯发送给客户端?' ++++++++++
3)客户端发送请求测试
⑤ secure_link_secret
=============== /prefix/hash/link的'解读' ===============
1)prefix'前缀'是非斜杠的任意的字符串
2)hash'哈希值'是link与密钥secret的MD5值
3)link'请求的路径'
⑥ 方式二
$secure_link的返回值规则:验证不通过是'空';通过则值为'资源路径'
(1)官方案例
(2)实操
1)原理
2)生成md5
3)nginx部分配置
细节点: nginx事先'已经知道' word
补充: ^可以匹配上'任何url'
4)客户端发送请求
机制:
1) nginx从url中取出'test.txt'并与nginx中的配置的'word'生成一个新的'md5_hash'
2) 然后与请求中传递的'md5_hash'做比较
⑦ 内置变量
⑧ 思考1
⑨ 思考2
⑩ 思考3
⑪ 思考4
后续: 收集'计算机相关'词汇 -->'目的':看英文文档