nginx 防盗链心得

后台是利用http服务器nginx和tomcat在linux环境中,

1.首先项目里做了一个简单的文件夹,里面的文件可以在知道目录路径的情况下,进行随意下载,

本来,如果是这样的话,拦截器就可以进行处理这样的请求。

思路是:获取权限,看这个请求是否有权限进行访问,但是,我们在tomcat的service.xml目录里面配置了绝对路径

这就造成了,不需要经过项目,只要tomcat进行开启就可以访问文件夹。

1.解决思路如下:

本项目:可以利用过滤器,或者拦截器,以获取是否有权限进行处理,

http://blog.csdn.net/warm_start/article/details/52582865

项目以外,因为请求都是要由nginx进行转发,所以可以利用nginx防盗链的处理方式

location /download {
         accesskey             on;
         accesskey_hashmethod  md5;
         accesskey_arg         "key" ;
         accesskey_signature   "mypass$remote_addr" ;
  }

accesskey为模块开关;
accesskey_hashmethod为加密方式MD5或者SHA-1;
accesskey_arg为url中的关键字参数;
accesskey_signature为加密值,此处为mypass和访问IP构成的字符串。
如果nginx没有安装防盗链模块,请下载安装
ActionContext ctx = ActionContext.getContext();
String pagefilename = ServletActionContext.getRequest().getParameter("路径");
String path = pagefilename.substring(5, pagefilename.length());
ctx.getSession().put("path", "/imgess/?key="+ md5加密的那串密文);
nginx接受到请求,转发给tomcat,tomcat在把上面那串请求返回时,必须加上那串MD5加密过的密文才能够访问
并且需要注意,请求开始是不需要密文的,返回数据到前台的时候,需要密文

继续测试发现,还有漏洞,就是说,如果输入tomcat中ip+端口,那么请求就不会经由nginx转发,绕过了nginx的防盗链,
解决办法就是:

在linux中防火墙限制其端口,只能使用nginx进行访问,不能直接访问tomcat

加在自启动中

vim /etc/init.d/rc.local

设置如下

iptables -A INPUT -s 127.0.0.1 -p tcp -m tcp --dport 8080 -j ACCEPT 

iptables -A INPUT -p tcp -m tcp --dport 8080 -j DROP

–A 参数就看成是添加一条规则

–p 指定是什么协议,我们常用的tcp 协议,当然也有udp,例如53端口的DNS

–dport 就是目标端口,当数据从外部进入服务器为目标端口

–sport 数据从服务器出去,则为数据源端口使用

–j 就是指定是 ACCEPT -接收 或者 DROP 不接收




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值