博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
玩静态资源加密验证
阅读量:6262 次
发布时间:2019-06-22

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

hot3.png

###背景 为了防止裸奔的静态图片和相关的附件被用户拿来随意拼装下载,需要研究特定的用户对特定资源的授权访问方案。当前为了满足大量用户的访问,web服务一般都有专用的静态资源服务器,逻辑服务器和静态资源服务域名不同、服务分开。进化高一些的大型站点,还有独立的验证服务。

###整体的架构方案 逻辑服务或者验证服务可以对每个静态资源计算一个特定的密码,访问静态资源时可以携带上这个密码,静态资源服务器在收到资源访问请求时先去解析密码,密码里有对资源路径的解密验证。

###静态资源服务器 采用nginx perl模块的方式进行验证。 ####nginx模块的编译

yum install -y perl-ExtUtils-Embed  openssl-devel openssl-static  openssl  libtool-ltdl  libtool-ltdl-devel./configure --prefix=/usr/local/web/nginx-1.6.2 --with-http_ssl_module    --with-http_perl_module

需要自己安装libmcrypt(这个玩意太危险了,看起来已经很久维护了,这玩意能藏后门,fuck)

[root@localhost Mcrypt-2.5.7.0]# vim Makefile.PLrequire 5.004 ; use ExtUtils::MakeMaker 5.16 ; use Config ;$MCRYPT_LDFLAGS = "-L/usr/local/libmcrypt-2.5.7/lib" ; $MCRYPT_CPPFLAGS = "-I/usr/local/libmcrypt-2.5.7/include" ; WriteMakefile( NAME => 'Mcrypt', VERSION_FROM => 'Mcrypt.pm', LIBS => [ "$MCRYPT_LDFLAGS -lltdl -lmcrypt" ], INC => " $MCRYPT_CPPFLAGS" , );

####nginx的配置

perl_modules lib;    perl_require proxy.pm;    perl_set $auth '        sub {            my $r = shift;            return proxy::check($r);        }    ';    server {        listen  80;        server_name myimg.com;        root /root/web/blog/public;        index index.html;        if ($auth = 0) {            return 400;        }        access_log logs/access_log combined;    }

####proxy模块代理

package proxy;use strict;use DES;use nginx;sub check {    my $r = shift;    my $uri = $r->uri;    my @uri_args = split(/&/, $r->args);    my $auth_key  = "";    my $flag = 0;    foreach my $tmp (@uri_args) {        $tmp=~s/^ +//;        $tmp=~s/ +$//;        my ($key, $value) = split(/=/, $tmp);        if ($key eq "token") {            $flag = 1;             $auth_key = $value;            last;        }    }    if ($flag == 1) {        return auth($auth_key, $uri);    } else {        return 0;    }}sub auth {    my $ticket = shift;    my $ino = shift;    my $mode = shift || 'cfb';    return () unless defined $ticket;    my $salt = 'your password';    my $td = new DES(key=>$salt, mode=>$mode);     my $data = $td->demcrypt($ticket);    if ($data eq $ino) {        return 1;    } else {        return 0;    }}1;__END__

####加密和解密的方式 加密方式和解密方式可以跟据自己的情况自行选择,写到DES.pm中,里面只要有demcrypt和enmcrypt方法就好了。算法你可以去追求性能,或者追求安全的,或者你他娘的自己造也行。 如果你使用laravel框架,这里可以直接使用自带的 ####静态资源密码生成方式

function rsToken($uri_path){	$salt = 'Yc1+04ox';	$td = new DesService($salt);	return $td->encrypt($uri_path);}

DES的加密和解密php版本的可以参考这个 这个代码略有点乱。 ####在需要权限验证的地方加上密码

转载于:https://my.oschina.net/xueyi28/blog/836813

你可能感兴趣的文章
flac格式转换mp3格式要用什么软件
查看>>
19. Remove Nth Node From End of List
查看>>
最佳在线图表软件
查看>>
Work with Alexa : 智能设备连接到Alexa
查看>>
[sublime系列文章] sublime text 3构建系统
查看>>
995. Minimum Number of K Consecutive Bit Flips
查看>>
for-loop 与 json.Unmarshal 性能分析概要
查看>>
C++中new的三种使用方法说明
查看>>
爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
查看>>
Python中_new_方法详解及使用
查看>>
flutter安装开发环境-问题记录
查看>>
mp4文件如何转换为webm格式
查看>>
如何在线创建数据流图(DFD)?
查看>>
腾讯—最新iOS面试题总结
查看>>
CGI,FASTCGI,PHP-CGI,PHP-FPM 概念
查看>>
DApp引荐机制正式上线 | IOST开发者赏金计划
查看>>
【剑指offer】9.二进制中1的个数
查看>>
GIF动画解析RNN,LSTM,GRU
查看>>
前端:开发规范
查看>>
《剑指offer》11.链表中倒数第k个节点
查看>>