博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Nginx]用Nginx实现与应用结合的訪问控制 - 防盗链
阅读量:5970 次
发布时间:2019-06-19

本文共 1501 字,大约阅读时间需要 5 分钟。

应用场景:图片等资源须要设置权限,如:仅仅有认证过的用户才干訪问自己的图片。

解决的方法:使用Nginx的防盗链模块http_secure_link能够实现,该模块默认情况下不包括。故在安装时要加上--with-http_secure_link_module

该模块依据两个參数控制权限訪问,一个是过期时间(即该链接在这个时间之前可訪问,过期后无法訪问),该參数主要出于安全考虑。

还有一个是通过md5算法算出来的KEY,一般通过uri计算

举例:

server {        listen       80;        server_name  192.168.1.22;        root /home/search/upload/portal_upload/user;        location / {            index  index.html index.htm;        }        location /img/dossier/ {            secure_link $arg_st,$arg_e;            secure_link_md5 guahao@345$uri$arg_e;            if ($secure_link = "") {                return 403;            }            if ($secure_link = "0") {                return 403;            }               rewrite ^/img/dossier/(.*)$ /img/dossier/$1 break;        }}
上面的secure_link定义了控制权限的两个參数(各自是st, e)

当中e就是上述的过期时间,建议e = 当前时间 + 有效期限(5分钟)

比如:
e = date +%s -d "December 22, 2014 12:22:03"
   = 1419222123
st的计算公式例如以下:md5(PKEY,uri,e)。当中PKEY是自己定义的常量

比如:

st = php -r 'print str_replace("=", "",strtr(base64_encode(md5("guahao@345/img/dossier/16/641fd565-ec87-4cbe-b4ae-7eedba41bb0e.jpg1419222123",TRUE)),"+/","-_")) . "\n";'

    =13c9kZrZT1qnNgpG4Vtksw

效果例如以下:

http://192.168.1.22/img/dossier/16/641fd565-ec87-4cbe-b4ae-7eedba41bb0e.jpg  --不可訪问

http://192.168.1.22/img/dossier/16/641fd565-ec87-4cbe-b4ae-7eedba41bb0e.jpg?st=13c9kZrZT1qnNgpG4Vtksw&e=1419222123  --过期前可訪问,过期后不可訪问
http://192.168.1.22/img/headpic/13/13_140x140.jpg   --不在dossier以下的图片没有訪问限制

OK,到此为此我们基本实现的基于应用的权限控制,且方法灵活。由于e和st的生成由应用程序来控制。能进行随意的改动和变动,而架构不受影响。

转载地址:http://avwox.baihongyu.com/

你可能感兴趣的文章
Java新手小程序之三
查看>>
我的友情链接
查看>>
Spring Web Application Security
查看>>
grant&revoke
查看>>
leveldb demo
查看>>
VMware网络配置详解
查看>>
再学 GDI+[83]: TGPImage(3) - 平行四边形变换
查看>>
Linux vmstat命令实战详解
查看>>
我的友情链接
查看>>
数据库中的自连接
查看>>
mysqlimport
查看>>
基于Xcode安装CocoaPods报错
查看>>
PHP判断变量内容是什么编码
查看>>
php扩展xdebug安装
查看>>
Linux mail 命令
查看>>
Ansi与Unicode及慎用W2A等
查看>>
IDEA 连接 GIT OSCHINA 提交本地已存在的项目
查看>>
EFI分区如何删除
查看>>
【Java集合源码剖析】TreeMap源码剖析
查看>>
二叉树
查看>>