Nginx下载防盗链(迅雷等下载软件)

什么是下载盗链


 

假设我们是一个B站,有些视频资源是可以提供给用户下载的。这时迅雷等其他下载软件,也提供下载该视频的服务,

但是迅雷很不厚道的,将我们的下载资源提供给他的用户,下载。占用我们的带宽来服务他的用户,这是绝对不可以忍了的。

使用来源判断根本不靠谱,只能防止一些小白站点的盗链,迅雷之类的下载工具完全无效,如果你是

nginx 的话,使用 secure link 完美解决这个问题,远离迅雷.

本文仅用于下载服务器,不适用于图片防盗链.

原理


  1. 用户访问 down.php
  2. down.php 根据 secret 密钥、过期时间、文件 uri 生成加密串
  3. 将加密串与过期时间作为参数跟到文件下载地址的后面
  4. nginx 下载服务器接收到了客户端传来的加密串与过期时间,同时自己也使用配置文件里的密钥,也根据过期时间,文件uri 生成自己的加密串
  5. 将用户传进来的加密串与自己生成的加密串进行对比,一致允许下载,不一致 403整个过程实际上很简单,

secure link module


例子:

location /s/ {
    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;
    }

    ...
}

secure_link 

  • 实际是由客户端传来的,加密串和过期时间 的变量
  • 当nginx secure_link_md5 指令做完内部检查
    • 前后台的加密串不一致
      • 设置 secure_link = ""
    • 前后台的加密串一致
      • 检查是否过期
        • 过期
          • 设置secure_link="0"
        • 未过期
          • 设置secure_link="1"

secure_link_md5

  • 是将所需参数传给后台处理
    • 链接过期时间
    • 链接URI
    • 远程地址

部署


安装

将http_secure_link_module 加到nginx中

不需要下载第三方模块

# ./configure --with-http_secure_link_module \
--prefix=/usr/local/nginx-1.4.2 --with-http_stub_status_module
# make
# make install

配置nginx

server {
     listen 80;
     server_name s1.down.ttlsa.com;
     access_log /data/logs/nginx/s1.down.ttlsa.com.access.log main;
     index index.html index.php index.html;
     root /data/site/s1.down.ttlsa.com;
     location / {
          secure_link $arg_st,$arg_e;
          secure_link_md5 ttlsa.com$uri$arg_e;
     if ($secure_link = "") {
          return 403;
     }
     if ($secure_link = "0") {
          return 403;
     }
 
     }
}

PHP下载页面

<?php
# 作用:生成 nginx secure link 链接
# 站点: www.ttlsa.com
# 作者:凉白开
# 时间: 2013-09-11
$secret = 'ttlsa.com'; # 密钥
$path = '/web/nginx-1.4.2.tar.gz'; # 下载文件
# 下载到期时间,time 是当前时间,300 表示 300 秒,也就是说从现在到 300 秒之内文件不过期
$expire = time()+300;
# 用文件路径、密钥、过期时间生成加密串
$md5 = base64_encode(md5($secret . $path . $expire, true));
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);
# 加密后的下载地址
echo '<a href=http://s1.down.ttlsa.com/web/nginx-1.4.2.tar.gz?st='.$md5.'&e='.$expire.'>nginx-1.4.2</a>';
echo '<br>http://s1.down.ttlsa.com/web/nginx-1.4.2.tar.gz?st='.$md5.'&e='.$expire;
?>

测试

打开 http://test.ttlsa.com/down.php 点击上面的连接下载
下载地址如下:
http://s1.down.ttlsa.com/web/nginx-1.4.2.tar.gz?st=LSVzmZllg68AJaBmeK3E8Q&e=1378881984

页面不要刷新,等到 5 分钟后在下载一次,你会发现点击下载会跳转到 403 页面。

 

注意事项


  • 密钥防止泄露、以及经常更新密钥
  • 下载服务器和 php 服务器的时间不能相差太大,否则容易出现文件一直都是过期状态.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值