问题描述

当我们网站转帖三方内容时,经常发现图片不能访问,原因就是三方网站图片做了防盗链处理,那我们应该怎么处理呢?

首先第一要想到的问题就是http头信息中的referer、host处理:

原理说明

一般三方网站做简单的防盗链都会配置referer\none来路才放行,那么我们就利于这点做一些简单的处理;

一般Nginx配置防盗链是这样配置的:

location ~* \.(gif|jpg|png|webp)$ {valid_referers none blocked  *.52it.club server_names ~\.google\. ~\.baidu\.;if ($invalid_referer) {return 403;}}

意思是对 referer 没设置或52it.club 或google\baidu.com的放行;

解决方案

将自己的网站禁用referer属性即可,在你的网站公共头部增加一段html代码:

<meta name="referrer" content="no-referrer"/>

意思是不设置referer参数;

更多扩展阅读

2014 年,W3C 的 Web 应用安全工作组(Web Application Security Working Group)发布了 Referrer Policy 草案,对浏览器该如何发送 Referrer 做了详细的规定。新版 Chrome 已经支持了这份草案,我们终于可以灵活地控制自己网站的 Referrer 策略了。

通过新的 Referrer Policy,我们可以针对第三方网站隐藏 Referrer,也可以只发送来源 URL 的 host 部分。但有一点要记住,新策略允许沉默,但不允许说谎。换句话说,你有权不告诉对方请求从哪儿来,但是不允许用假来源去骗人。不过即便是这样,这也对现有一些 Web 应用程序的安全性造成威胁。不少 Web 应用在限制 Referrer 时允许为空,之前想要发送无 Referrer 请求还要一点点技巧,现在就轻而易举了。

Referrer Policy States

新的 Referrer Policy 规定了五种 Referrer 策略:No Referrer、No Referrer When Downgrade、Origin Only、Origin When Cross-origin、和 Unsafe URL。之前就存在的三种策略:never、default 和 always,在新标准里换了个名称。他们的对应关系如下:

策略名称 属性值(新) 属性值(旧)
No Referrer no-referrer never
No Referrer When Downgrade no-referrer-when-downgrade default
Origin Only origin -
Origin When Cross-origin origin-when-crossorigin -
Unsafe URL unsafe-url always

可以看到,新标准给之前的三种策略赋予了更具意义的新名称,同时还增加了两种新策略。另外现阶段支持 Referrer Policy 的浏览器保留了对旧标准的支持,但还是推荐大家尽快更新。简单介绍下这五种类型的具体含义:

  • No Referrer:任何情况下都不发送 Referrer 信息;
  • No Referrer When Downgrade:仅当发生协议降级(如 HTTPS 页面引入 HTTP 资源,从 HTTPS 页面跳到 HTTP 等)时不发送 Referrer 信息。这个规则是现在大部分浏览器默认所采用的;
  • Origin Only:发送只包含 host 部分的 Referrer。启用这个规则,无论是否发生协议降级,无论是本站链接还是站外链接,都会发送 Referrer 信息,但是只包含协议 + host 部分(不包含具体的路径及参数等信息);
  • Origin When Cross-origin:仅在发生跨域访问时发送只包含 host 的 Referrer,同域下还是完整的。它与 Origin Only 的区别是多判断了是否 Cross-origin。需要注意的是协议、域名和端口都一致,才会被浏览器认为是同域;
  • Unsafe URL:无论是否发生协议降级,无论是本站链接还是站外链接,统统都发送 Referrer 信息。正如其名,这是最宽松而最不安全的策略;

Referrer Policy Delivery

知道了有哪些策略可以用,还需要了解怎么用。这里介绍指定 Referrer Policy 的三种方式:

CSP 响应头

CSP(Content Security Policy),是一个跟页面内容安全有关的规范。在 HTTP 中通过响应头中的 Content-Security-Policy 字段来告诉浏览器当前页面要使用何种 CSP 策略。现在 CSP 还可以通过 referrer 指令和五种可选的指令值,来指定 Referrer 策略,格式非常简单:

Content-Security-Policy: referrer no-referrer|no-referrer-when-downgrade|origin|origin-when-cross-origin|unsafe-url;

注:根据文档,通过 CSP 头部设置 Origin When Cross-origin 策略时,指令值应该用 origin-when-cross-origin,这跟前面的表格里的 origin-when-crossorigin 有差异。实际上经过我的测试,Chrome 42 只支持 origin-when-crossorigin,后续会不会变还不知道,建议大家使用时,自己先测一下。

CSP 的指令和指令值之间以空格分割,多个指令之间用英文分号分割。

<meta> 标签

通过 <meta> 标签也可以指定 Referrer 策略,同样很简单:

<meta name="referrer" content="no-referrer|no-referrer-when-downgrade|origin|origin-when-crossorigin|unsafe-url"/>

需要注意的是,<meta> 只能放在 <head>...</head> 之间,如果出现的位置不对会被忽略。同样,如果没有给它定义 content 属性,或者 content 属性为空,也会被忽略。如果 content 属性不是合法的取值,浏览器会自动选择 no-referrer 这种最严格的策略。

<a> 标签的 referrer 属性

通过给 <a> 标签增加 referrer 属性也可以指定 Referrer 策略,格式如下:

<a href="https://www.52it.club" referrer="no-referrer|origin|unsafe-url">52it.club</a>

这种方式作用的只是这一个链接。并且,<a> 标签可用的 Referrer 策略只有三种:不传、只传 host 和都传。另外,这样针对单个链接设置的策略优先级比 CSP 和 <meta>要高。

需要注意的是:经过我的测试,目前并没有哪个浏览器实现了对 referrer 属性的支持。现阶段,如果要针对单个链接去掉 Referrer,还是推荐使用下面这种支持度更好的写法:

<a href="https://www.52it.club" rel="noreferrer">52it.club</a>

另外再重复一遍,现阶段的浏览器还保留了对 never、default 和 always 的支持,但是已经不推荐使用了。

可以看到,通过新的 Referrer 策略,网站所有者可以选择更高的安全级别来保证用户隐私不被泄露;也可以选择更低的安全级别来获得一些便利,相比之前只能由浏览器默认策略一刀切,确实灵活了不少。

【建站教程】网站引用三方图片遇到简单防盗链referer的处理办法相关推荐

  1. php cms建站,Phpcms v9 建站教程-网站基本设置

    三.网站基本信息设置 安装完成后打开首页我们可以看到网站标题.Logo等都是默认的官方数据,所以我们要对网站进行一些基本的设置.打开后台→设置→站点管理,点击默认站点后面的管理进入设置界面.在基本配置 ...

  2. 上树建站教程:新手单页网站制作教程上集

    功能强大. 链接.文件下载等功能,一份源程序可以制造出无数个网站,只需一些超级简单的 页面程序可以随意的编辑.修改,包括:图片.文案.背景.图片滚动  单页型网站:就是一个独立页面的网站,是一个纯HT ...

  3. 企业如何建设网站之基础建站教程

    企业如何建设网站之基础建站教程 企业如何建设一个属于自己企业的网站,在这网站建设的过程当中需要经过哪些基本步骤呢?一般来说,企业想要建立一个网站需要了解一下网站基本的构建环境.建设企业网站必备的基本条 ...

  4. 新手建站教程:如何建一个网站?

    如何建一个网站?零一今天来分享一下建站教程. 建站也叫网站搭建,或者网站建设,网站制作.做网站.创立网站等等说法.就是指在互联网上建立一个可以访问的网站.不论是个人网站还是公司网站,要想搭建一个网站, ...

  5. 最详细的US Domain Center主机建站教程: 零基础购买及搭建网站步骤 (图文教程)

    本 US Domain Center 建站教程会从零开始教新手如何一步步自己购买域名(Domain Name),高速主机(Hosting),和SSL加密证书,然后一键免费安装WordPress建站系统 ...

  6. Wordpress建站教程:Compress JPEG PNG Images图片压缩插件的使用

    作者:悦然wordpress建站/悦然建站 继续给大家分享wordpress建站教程,今天分享的主题是图片压缩.关于网站图片压缩悦然网络工作室其实已经讲过不少了,之前还给大家分享过一个免费图片压缩工具 ...

  7. php网站如何静态化链接,建站教程之网站URL静态化处理

    网络技术的日益发展,使得jsp.php等语言广泛的普及,很多的网站都早已进入动态化时期.过去的建站教程之网站URL静态化处理纯净html网页已经很难再找到了,而现在的网站大多数都拥有自己的数据库,它们 ...

  8. 怎么建一个网站?新手建站教程

    怎么建一个网站?站长网今天来分享一下建站教程. 建站也叫网站搭建,或者网站建设,网站制作.做网站.创立网站等等说法.就是指在互联网上建立一个可以访问的网站.不论是个人网站还是公司网站,要想搭建一个网站 ...

  9. WordPress建站教程 从零开始服务器搭建网站超详细

    说起第一次使用Wordpress建站,相信大部分人的印象都是虚拟主机.空间搭网站,因为便宜.省心,自己搭个小站放上去也算足够,但是随着各种技术的迅速发展,原来的很多虚拟主机已经不能再满足Wordpre ...

  10. 【十四、网站备案、博客备案、工信部备案】2021最详细wordpress博客建站教程(2021.03.04更新)

    通过本wordpress博客建站教程系列系列文章,你可以不懂网页代码条件下,搭建一个谷歌insight测评90分的个人博客,最低费用在每年80块.本人搭建博客小站点击下面链接即可进入:         ...

最新文章

  1. 传潘石屹投资爱蜂潮 天猫不予评论
  2. BNN领域开山之作——不得错过的训练二值化神经网络的方法
  3. WCF第一个Demo
  4. 360Apm源码解析
  5. 1-2 通过SQL管理数据库文件
  6. tdd干扰波形_LTE常见干扰排查(中国移动)
  7. STL 之find,find_if,find_end,find_first_of
  8. Spark Streaming 实战案例(二) Transformation操作
  9. 职场与生活 八条原则 让你不再浪费时间和提高效率
  10. Python 告诉你,情人节该送什么礼物?
  11. c++ 调用程序接口_添加系统调用(返回文件信息)
  12. Android内存优化之——static使用篇
  13. 微信小程序点餐系统怎么做
  14. 正交法设计测试用例时可以使用的工具allpairs---生成正交表
  15. java 异步写_Java异步编程实战
  16. 程序员新电脑装机软件
  17. 新闻发布系统设计说明书
  18. SG3525芯片简介
  19. 伯努利公式怎么推导的
  20. 毛刺现象 java_记一次微服务耗时毛刺排查

热门文章

  1. 程序员写在猝死的前一天
  2. Reactor(反应器)模式
  3. 论文翻译:A Tutorial on Thompson Sampling
  4. c/c++ 实现推箱子小游戏
  5. (小柯-java- 基础)
  6. window系统谷歌图标显示异常之IconCache.db(图片缓存文件)
  7. C# 利用 OleDb 组件操作 Excel 进行文件读写操作
  8. Content type ‘application/json;charset=UTF-8‘ not supp...
  9. #PPT进阶——图片变形
  10. 小马模拟器 (支持Android系统)