有时候在浏览网页的时候,会遇到某些文件(图片等)无法访问的情况,这是因为图片的所有方做了防盗链机制

了解防盗链之前先了解下http referer这个属性,http referer是请求头中的一部分,当浏览器向web服务器发出请求时,一般会带上这个属性用来表明网页的来源,比如我在qq空间里添加朋友的空间链接,那么当有人点击我空间里的这个链接调到朋友的qq空间时,referer的值就是我空间的url。

防盗链的基本原理就是根据请求头中referer属性得到网页来源,从而实现访问控制。

为什么要实现防盗链?首先这些非法访问并不会给网站带来利益或好处,相反,这会浪费网站的带宽,增加服务器的连接压力,比如有些网站是按流量收费的,那么只要有人访问了盗用图片或其他文件的网站,网站就要支付这部分的流量费用。

以下是在nginx的实现方式:

1 基本方式(ngx_http_referer_module模块)

第一行:定义了当访问资源为gif/jpg/png/bmp文件

第二行:valid_referers这个关键字定义了白名单

第三行:invalid_referer是内置变量,通过判断上一行中的valid_referers值会返回0或者1,

none代表请求头中没有referer信息,这一般是直接在浏览器输入图片网址

blocked代表被防火墙过滤标记过的请求

第四行:如果访问来源不在白名单内,则返回403错误

第五行:可以通过设定指定的图片来代替目标图片

这种实现可以限制大多数普通的非法请求,但不能限制有目的的请求,因为这种方式可以通过伪造referer信息来绕过

2 使用http_accesskey_module模块或lua脚本实现

原理如下:不通过referer信息判断,通过约定url后的参数key的值(加密)来判断是否是合法来源。

最新文章

  1. hibernate 异常:Unexpected Exception caught setting
  2. Application和Page详解
  3. CXF集成spring做webservice接口
  4. Ajax客户登陆验证
  5. mongoose 数据库操作 - 分页
  6. java静态初始化代码块
  7. Java常用类之String类、Stringbuffer和Random类练习
  8. Android简易实战教程--第十二话《代码获取手机总运行内存的大小》
  9. MongoDb 集群不可用后SECONDARY节点强制启动
  10. sort排序原理
  11. 包建强的培训课程(13):iOS与ReactNative
  12. bzoj千题计划321:bzoj5251: [2018多省省队联测]劈配(网络流 + 二分)
  13. JAVA笔记--static
  14. Vue(八)发送跨域请求
  15. ruby 基础知识 - Class 与 Module
  16. C++:MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStart
  17. 全局JavaScript对象
  18. offSet().left 与position().left的区别
  19. 36. Oracle查询数据库中所有表的记录数
  20. WordPress主题开发:网站搜索

热门文章

  1. Unix高级环境编程
  2. 蓝桥杯 2014本科C++ B组 六角填数 枚举排列
  3. C++11: Multi-core Programming – PPL Parallel Aggregation Explained
  4. 1.1-1.4 hadoop调度框架和oozie概述
  5. ASP.NET Core MVC 2.x 全面教程_汇总贴
  6. 接口开发之PHP创建XML文件
  7. 数据结构关于AOV与AOE网的区别
  8. ZOJ3228【AC自动机】
  9. Mysql字符串截取总结及项目实际运用:left()、right()、substring()、substring_index()
  10. C#主从表查询