• 防盗链(二)nginx secure_link下载防盗链


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

    安装nginx

    默认情况下nginx不会安装secure_link模块,需要手动指定,配置参数如下

    配置nginx

    php下载页面

    测试nginx防盗链

    打开http://test.ttlsa.com/down.php点击上面的连接下载
    下载地址如下:
    http://s1.down.ttlsa.com/web/nginx-1.4.2.tar.gz?st=LSVzmZllg68AJaBmeK3E8Q&e=1378881984
    页面不要刷新,等到5分钟后在下载一次,你会发现点击下载会跳转到403页面。

    secure link 防盗链原理

    • 用户访问down.php
    • down.php根据secret密钥、过期时间、文件uri生成加密串
    • 将加密串与过期时间作为参数跟到文件下载地址的后面
    • nginx下载服务器接收到了过期时间,也使用过期时间、配置里密钥、文件uri生成加密串
    • 将用户传进来的加密串与自己生成的加密串进行对比,一致允许下载,不一致403

    整个过程实际上很简单,类似于用户密码验证. 尤为注意的一点是大家一定不要泄露了自己的密钥,否则别人就可以盗链了,除了泄露之外最好能经常更新密钥.

    secure link 指令

    secure_link
    语法: secure_link md5_hash[,expiration_time]
    默认: none
    配置段: location
    variables: yes

    这个指令由uri中的MD5哈希值和过期时间组成. md5哈希必须由base64加密的,过期时间为unix时间.如果不加过期时间,那么这个连接永远都不会过期.

    secure_link_md5
    语法: secure_link_md5 secret_token_concatenated_with_protected_uri
    默认: none
    配置段: location
    variables: yes
    md5值对比结果,使用上面提供的uri、密钥、过期时间生成md5哈希值.如果它生成的md5哈希值与用户提交过来的哈希值一致,那么这个变量的值为1,否则为0

    secure_link_secret
    语法:     secure_link_secret word
    默认:
    配置段:     location
    Reference:    secure_link_secret
    nginx 0.8.50之后的版本已经使用secure_link_md5取代,不在多说.

    注意事项

    • 密钥防止泄露、以及经常更新密钥
    • 下载服务器和php服务器的时间不能相差太大,否则容易出现文件一直都是过期状态.

    最后

    secure link以及内置到了nginx,不需要额外安装第三方模块,有下载服务器的兄弟,我极力推荐你们使用它,除非你不在乎你的带宽.

     
  • 相关阅读:
    java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁(转)
    MySQL存储引擎--MyISAM与InnoDB区别
    Socket详解
    Java线程池参数
    Java反射机制(转)
    java注解
    docker入门实例
    docker常用命令总结
    showdoc 自动脚本安装
    [mysql]You must reset your password using ALTER USER statement before executing this statement.
  • 原文地址:https://www.cnblogs.com/youqc/p/14428280.html
Copyright © 2020-2023  润新知