前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx secure_link防盗链模块

Nginx secure_link防盗链模块

作者头像
BUG弄潮儿
发布2022-06-30 15:14:35
1K0
发布2022-06-30 15:14:35
举报
文章被收录于专栏:JAVA乐园

Nginx ngx_http_secure_link_module模块能够检查请求链接的权限以及是否过期,多用于下载服务器防盗链。

原理

1)加密串与过期时间作为url中的参数

2)nginx服务器接收到了过期时间,也使用过期时间、配置里密钥、文件uri生成加密串

3)计算的加密串与url传递的加密串进行对比

开启ngx_http_secure_link_module

代码语言:javascript
复制
./configure --with-http_secure_link_module #编译nginx时加入 
1

该模块提供两种工作模式:

模式一

通过配置 secure_link ,secure_link_md5 ,可实现对链接进行权限以及过期检查判断的功能。

secure_link

  • 语法 语法 : secure_link expression; 默认值: 无 配置段:http, server, location
  • 说明 expression由校验值 和 过期时间组成,其中校验值将会与 secure_link_md5中的指定参数的MD5哈希值进行对比,如果两个值不一致,secure_link变量的值是空(empty),如果两个值一致,则进行过期检查,如果过期了,则secure_link变量值是”0”,如果没过期,则为”1”. 如果链接是有时效性的,那么过期时间用时间戳进行设置,在MD5哈希值后面声明,用逗号隔开。如果没有设置过期时间,该链接永久有效。

secure_link_md5

  • 语法 语法 : secure_link_md5 expression; 默认值: 无 配置段:http, server, location
  • 说明 expression指定计算md5哈希值的参数,该md5值将会和url中传递的md5值进行对比校验。expression一般包含uri(如demo.com/s/link uri则为/s/link) 以及 加密 密钥secret,如果该链接具有时效,则expression需包含$secure_link_expires,expression还可以加入客户端信息,如访问IP,浏览器版本信息等.

实例

代码语言:javascript
复制
nginx配置

位置 /s/ {安全链接 $arg_md5 
    ,$ arg_expires ;
    secure_link_md5我的秘密 $arg_expires $uri ;    if ( $secure_link = "" ) {        返回403 ; 
    }     if ( $secure_link = "0" ) {        返回410 ; 
    }

}



在UNIX系统中MD5的数值计算下面得出

    echo -n '2147483647/s/link127.0.0.1 秘密' | \ 
    openssl md5 -二进制| openssl base64 | tr + / -_ | tr -d =       
  • 在php中访问url
代码语言:javascript
复制
$secret = "秘密" ; $uri = "/hls/cctv1.m3u8" ; $过期=时间()+ 300 ;
$md5 = base64_encode(md5( $expire . $uri . $secret , true )); $md5 = strtr( $md5 , '+/' , '-_' ); $md5 = str_replace( '=' , '' , $md5 ); $url = "http://demo.com/hls/cctv1.m3u8?md5={ $md5 }&expires={ $expire }" ;

模式二

通过配置 secure_link_secret 可实现对链接进行权限判断的功能。

secure_link_secret

  • 语法 语法 : secure_link word; 默认值: 无 配置段:http, server, location
  • 说明 使用一个加密字符串对访问路径进行鉴权

请求的链接形式如下

/prefix/hash/link

前缀是非斜杠的任意的字符串,哈希值是link与密钥secret的MD5值,link请求的路径

  • 实例
代码语言:javascript
复制
位置/ s/{
    secure_link_secret 我的秘密;
    如果 ($secure_link = "") {
        返回403;
    }
    重写 ^ /helloworld/ $secure_link ;
}
位置 /helloworld/ {    返回503 ; 
}

如访问  /s/fdb191a547321828363169ca530ee271/hello 被直接到  /helloworld/hello

哈希值的计算方法  md5(link.MySecret)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BUG弄潮儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原理
  • 1)加密串与过期时间作为url中的参数
  • 2)nginx服务器接收到了过期时间,也使用过期时间、配置里密钥、文件uri生成加密串
  • 3)计算的加密串与url传递的加密串进行对比
  • 开启ngx_http_secure_link_module
  • 模式一
    • secure_link
      • secure_link_md5
        • 实例
        • 模式二
          • secure_link_secret
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档