nginx实现放盗链

昨天面试被面试官问到了放盗链原理,没有回答好,今天特意整理了一下

有时候在浏览网页的时候,会遇到某些文件(图片等)无法访问的情况,这是因为图片的所有方做了防盗链机制;
放盗链的基本原理就是根据请求头中referer属性得到网页来源,从而实现控制。
http referer是请求头中的一部分,当浏览器向web服务器发出请求时,一般会带上这个属性来表明网页的来源;
比如我在我的网站中添加朋友的网站链接图片,那么当有人点击我网页里这个链接会调到朋友的网站里的图片,referer的值就是我网站的url,我的朋友就可以根据不是以他网址开头的referer做限制,这样我的网址就没法访问他的图片文件等信息,从而不浪费他网站的带宽和连接压力。

nginx实现放盗链:   引用nginx http referer module模块  

        location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ {
            valid_referers none blocked www.baidu.com;
            if ($invalid_referer) {
               #rewrite ^/ [img]http://yzil.cn[/img];
               return 403;
            }
        }  

1、第一行:定义了当访问资源为gif|jpg|png|swf|flv|rar|zip 文件;
2、第二行:valid_referer这个关键字定义了白名单  www.baidu.com
          none代表请求头中没有referer信息,这一般是直接在浏览器输入图片网站
          blocked代表被防火墙过滤标记过的请求
3、第三行:invalid_referer是内置变量,通过判断上一行中的valid_referers值会返回或者1
4、第四行:rewirte 重新当前网址到你自己的网址首页上面
5、第五行:如果访问来源不在白名单中,则返回403错误
这种实现可以限制大多数铍铜的非法请求,但不能限制有目的的请求,因为这种方式可以通过伪造referer信息来绕过

2、使用http_accesskey_module模式或lua脚本实现
原理如下:不通过referer信息判断,通过约定url后的参数key的值(加密)来判断是否是合法来源

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

y_zilong

一分钱的肯定

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值