防盗链另外一种解决方案:secure_link 模块referer 模块是一种简单的防盗链手段,必须依赖浏览器发起请求才会有效,如果攻击者伪造 referer 头部的话,这种方式就失效了 。
secure_link 模块是另外一种解决的方案 。
它的主要原理是,通过验证 URL 中哈希值的方式防盗链 。
基本过程是这个样子的:
- 由服务器(可以是 Nginx,也可以是其他 Web 服务器)生成加密的安全链接 URL,返回给客户端
- 客户端使用安全 URL 访问 Nginx,由 Nginx 的 secure_link 变量验证是否通过
- 哈希算法是不可逆的
- 客户端只能拿到执行过哈希算法的 URL
- 仅生成 URL 的服务器,验证 URL 是否安全的 Nginx,这两者才保存原始的字符串
- 原始字符串通常由以下部分有序组成:资源位置 。如 HTTP 中指定资源的 URI,防止攻击者拿到一个安全 URI 后可以访问任意资源用户信息 。如用户的 IP 地址,限制其他用户盗用 URL时间戳 。使安全 URL 及时过期密钥 。仅服务器端拥有,增加攻击者猜测出原始字符串的难度
- ngx_http_secure_link_module未编译进 Nginx,需要通过 --with-http_secure_link_module 添加
- 变量secure_linksecure_link_expires
Syntax: secure_link expression;Default: —Context: http, server, locationSyntax: secure_link_md5 expression;Default: —Context: http, server, locationSyntax: secure_link_secret word;Default: —Context: location变量值及带过期时间的配置示例- secure_link值为空字符串:验证不通过值为 0:URL 过期值为 1:验证通过
- secure_link_expires时间戳的值
- 生成 md5
echo -n '时间戳URL客户端IP密钥' | openssl md5 -binary | openssl base64 | tr +/ - | tr -d =- 构造请求 URL
/test1.txt?md5=md5生成值&expires=时间戳(如 2147483647)Nginx 配置- secure_link $arg_md5,$arg_expires;secure_link 后面必须跟两个值,一个是参数中的 md5,一个是时间戳
- secure_link_md5 "$secure_link_expires$uri$remote_addr secret";按照什么样的顺序构造原始字符串
server { server_name securelink.ziyang.com;listen 80; error_loglogs/myerror.loginfo; default_type text/plain; location /{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;}return 200 '$secure_link:$secure_link_expiresn'; } location /p/ {secure_link_secret mysecret2;if ($secure_link = "") {return 403;}rewrite ^ /secure/$secure_link; } location /secure/ {alias html/;internal; }}仅对 URI 进行哈希的简单办法除了上面这种相对复杂的方式防盗链,还有一种相对简单的防盗链方式,就是只对 URI 进行哈希,这样当 URI 传- 将请求 URL 分为三个部分:/prefix/hash/link
- Hash 生成方式:对 “link 密钥” 做 md5 哈希
- 用 secure_link_secret secret; 配置密钥
- 原请求link
- 生成的安全请求/prefix/md5/link
- 生成 md5echo -n 'linksecret' | openssl md5 –hex
- secure_link_secret secret;
【听说你的资源被盗用了,那你知道 Nginx 怎么防盗链吗?】
推荐阅读
- 你的Windows10总是显示"更新并关机"?跟我学,让你彻底将它关闭
- 经常听说的HSG、BSG、ISG电机,都是怎么回事儿?
- 使你的日常生活变得更加轻松的7个家庭技巧
- 茶叶教学函授班,中粮茶业入选中华老字号文化教学资源库
- Win10无法开机提示自动修复无法修复你的电脑的有效解决方法
- 发挥资源优势,浙江省白化茶树品种系优选品质评鉴会在杭州举行
- 如何远程开启你的电脑:WoL的原理和陷阱
- 你的车险怎么买的?是只看保费不看险种吗?
- 是什么原因导致你的手冲咖啡不好喝?
- 内测|听说,《非一般职场》手游内测要开始啦(?ω<)
