Nginx http_secure_link_module 实现下载防盗链

网友投稿 832 2022-09-27

Nginx http_secure_link_module 实现-防盗链

Nginx  http_secure_link_module 实现-防盗链

secure_link 模块

-服务器上有众多的软件资源, 可是很多来源不是本站,是迅雷、 flashget, 源源不断的带宽,防盗链绝对是当务之急. 使用来源判断根本不靠谱,只能防止一些小白站点的盗链,迅雷之类的-工具完全无效,如果你是nginx 的话,使用 secure link 完美解决这个问题,远离迅雷.本文仅用于-服务器,不适用于图片防盗链。

该模块主要实现下面两个功能:

(1)指定并允许检查请求的链接的真实性以及保护资源免遭未经授权的访问 (2)限制链接生效周期

默认情况下 nginx 不会安装 secure_link 模块,需要手动指定,配置参数如下: # ./configure --with-\ --prefix=/usr/local/nginx-1.4.2 --with-link 指令

secure_link语法: secure_link md5_hash[,expiration_time]默认: none配置段: locationvariables: yes这个指令由 uri 中的 MD5 哈希值和过期时间组成. md5 哈希必须由 base64 加密的,过期时间为 unix 时间.如果不加过期时间,那么这个连接永远都不会过期.secure_link_md5语法: secure_link_md5 secret_token_concatenated_with_protected_uri默认: none配置段: locationvariables: yesmd5 值对比结果,使用上面提供的 uri、密钥、过期时间生成 md5 哈希值.如果它生成的 md5 哈希值与用户提交过来的哈希值一致,那么这个变量的值为 1,否则为 0secure_link_secret语法: secure_link_secret word默认:配置段: locationReference: secure_link_secretnginx 0.8.50 之后的版本已经使用 secure_link_md5 取代,不再多说.

验证原理

配置nginx

server { listen 80; server_name test.com; charset utf-8; root /usr/local/nginx/html/; location /{ secure_link $arg_md5,$arg_expires; #secure_link:取参数md5,expires的值 secure_link_md5 "$secure_link_expires$uri test"; #test为自定义的加密串 #secure_link_md5验证参数md5,expires是否和服务端生成验证的一致 if ($secure_link = "") { #资源不存在或哈希比对失败 return 403; } if ($secure_link = "0") { #时间戳过期 return 410; } }}

使用shell脚本生成-的链接(生产环境由开发在代码中实现)

[root@cat md5url.sh #!/bin/bash#生成一个测试链接脚本servername="192.168.179.99" #服务器的IP或者域名download_file="/nginx.png" #测试-文件的uri路径,该环境nginx.png放在/usr/local/nginx/html下面time_num=$(date -d "+300 seconds" +%s) #定义过期时间为300秒secret_num="test" #自定义的加密串,和nginx的配置文件中加密串相同res=$(echo -n "${time_num}${download_file} ${secret_num}"|openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =) #生成MD5值echo " #打印-链接[root@./md5url.sh app]# ./md5url.sh ----注意!!!每时每刻该shell脚本产生的expires值都在发生变化app]# ./md5url.sh app]# ./md5url.sh app]# wget `bash md5url.sh` --测试-nginx.png图片--2020-05-08 12:00:32-- to 192.168.179.99:80... connected.HTTP request sent, awaiting response... 200 OKLength: 848 [image/png]Saving to: ‘nginx.png?md5=h7Mwc0S7sdglbuC8i5UsrQ&expires=1588910732’100%[===============================================================================================>] 848 --.-K/s in 0s 2020-05-08 12:00:32 (161 MB/s) - ‘nginx.png?md5=h7Mwc0S7sdglbuC8i5UsrQ&expires=1588910732’ saved [848/848][root@app]# lsmd5url.sh nginx.png?md5=h7Mwc0S7sdglbuC8i5UsrQ&expires=1588910732[root@sbin]# cmp /usr/local/nginx/html/nginx.png /opt/app/nginx.png\?md5\=h7Mwc0S7sdglbuC8i5UsrQ\&expires\=1588910732 -l #可以看到-的和源图片内容是一样的[root@app]# #可以看到-成功[root@app]# wget 83766[root@app]# --2020-05-08 12:06:25-- to 192.168.179.99:80... connected.HTTP request sent, awaiting response... 403 Forbidden ##资源不存在或哈希比对失败,这里是哈希对比失败2020-05-08 12:06:25 ERROR 403: Forbidden.[1]+ Exit 8 wget 密钥防止泄露、以及经常更新密钥2 -服务器和链接生成的服务器上的时间不能相差太大,否则容易出现文件一直都是过期状态.

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot Test 多线程报错的根本原因(dataSource already closed)
下一篇:Shell case in简要说明与使用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~