破解图片防盗链
因为之前使用了豆瓣的图书 API 用着的时候web 系统突然发现所有的图片都访问不了、然后谷歌一查原来豆瓣采取了防盗链。
问题很简单,就是我希望在自己的页面里用 img src=”xxxx” 来引用其他网站的一张图片,但是他的网站设置了防盗链的策略,会在后台判断请求的Referrer属性是不是来自于一个非本域名的网站,如果来源不是本域名就返回 403 forbidden。
我的目的就是用最方便的方法使得我的页面能够不受他的防盗链策略的影响。
解决的方案
1、 使用后台的预下载(把图片下载下来放到服务器下)
缺点: 占用服务器的空间,访问速度没有豆瓣提供的稳点。有些网站是静态的如 hexo 就无法实现。
2、第三方代理
缺点: 不稳点,第三方代理可能在国内访问不稳定,在国内没有好的推荐。也可以自己做一个代理,之前有人用 GO 做过一个。
下面有一个,url 后面填上豆瓣 Api 返回的图片地址
https://pic1.xuehuaimg.com/proxy/https://images.weserv.nl/?url=http://img.zcool.cn/community/01d881579dc3620000018c1b430c4b.JPG@3000w_1l_2o_100sh.jpg
3、还有一种比较友好和奢侈的,上传 CDN 调用 CDN 的地址,
缺点: 有点奢侈,因为所有图片都存到 CND 占用大量空间,CND 可能需要钱购买,CND 服务商提供图片上传的 API
4、删除 Header 中的 Referrer:meta name="referrer" content="never"
content 有四个值可以选择 never,always,origin,default 这是来自于 whatwg 标准,浏览器对他的支持还是很好的。
MDN 标准,还多了一个 no-referrer5.添加 ReferrerPolicy 属性 添加 meta 标签相当于对文档中的所有链接都取消了 referrer, 而R eferrerPolicy 则更精确的指定了某一个资源的referrer策略。 关于这个策略的定义可以参照MDN。 比如
我想只对某一个图片取消referrer,如下编写即可: img src="xxxx.jpg" referrerPolicy="no-referrer"
实测 给图片加referrerPolicy="no-referrer" 有效
------------------------------------------------------------
网络中收集的一些图片镜像缓存服务,在很多时候可以起到不错的用途。
https://search.pstatic.net/common?src=
https://imageproxy.pimg.tw/resize?url=
https://images.weserv.nl/?url=
https://pic1.xuehuaimg.com/proxy/
图像缓存可以用来做什么? 可以将有防盗链的图片引用到网页,并成功显示。 可以将 http 图片引用到 https 页面而不出现证书问题。 可以将 xxx 的图片,成功加载。 可以将比较慢的图片资源,加快显示。 部分服务图片链接可以不添加 http:// 或 https:// 协议。
https://pic1.xuehuaimg.com/proxy/https://imageproxy.pimg.tw/resize?url=https://pic1.xuehuaimg.com/proxy/https://i.imgur.com/hWghm6oh.jpg
https://pic1.xuehuaimg.com/proxy/https://images.weserv.nl/?url=i.imgur.com/hWghm6oh.jpg
https://pic1.xuehuaimg.com/proxy/https://pic1.xuehuaimg.com/proxy/i.imgur.com/hWghm6oh.jpg
对速度有要求可以首选 https://search.pstatic.net/common?src= 经过测试这个是速度比较快的图片缓存代理。
防盗链图片演示 https://pic1.xuehuaimg.com/proxy/http://pic1.zhimg.com/v2-8b657dff159debf1cff463d61b7dcafd_r.jpg
该图片是知乎图片,存在防盗链直接贴在网页中无法显示,在图片外链前面加上图片镜像服务后可以正常显示了。
https://pic1.xuehuaimg.com/proxy/https://i.imgur.com/hWghm6oh.jpg 该图片是知名图床 imgur 的图片,至今已有 10 多年历史,由于上面不限制上传图片类型所以在中国无法打开,在图片外链前面加上图片镜像服务后就可以正常显示了。