MENU

新浪图床防盗链始末

2020 年 02 月 19 日 • 阅读: 22298 • 博客

新浪图床加防盗链检测已经是很久以前的事了,那时我还在用静态博客,虽然也中了招,但只有几篇帖子,影响不大。但今天有博友留言仍未解决,希望有办法暂时恢复图片显示,慢慢迁移,所有我就借花仙佛,总结一下已有的快速恢复和迁移方法。

可忽略内容

问题发生后,万能网友很快发现,空 referrer 头仍能获取图片,这说明新浪未做强防盗链检测。已有机制是校验 HTTP 协议头的 referrer 字段,即来源验证。具体来说,假如你的帖子 http://blog.xx.com/123.html 引用了一张新浪图片,浏览器向服务器请求该图片时,会把 referrer=http://blog.xx.com/123.html 一并发送过去,新浪检查到非官方来源便返回了 403 禁止访问。如果强制发送 referrer= 或不发送该字段,服务器仍正常返回,所以就有了以下各种 no-referrer 配置。

前端

META

方式一,在每个页面的 head 部分添加 meta 标签,会导致站点评论、统计等功能失效,因为它们同样依赖来源。

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

IMG

方式二,给每张图片单独配置 referrer 策略,不兼容 IE、Edge 和 Safari on iOS。

  • <img src="demo.jpg" referrerpolicy="no-referrer">

IFRAME

方式三,将图片放到 iframe,每张图片都写这么多代码,没人有耐心,且有相同的兼容性问题。

  • <script>
  • function iframeLoaded(target) {
  • var img = target.contentDocument.images[0];
  • target.width = img.width;
  • target.height = img.height;
  • }
  • window.sina = '<img src="//wx4.sinaimg.cn/large/007iuyE8gy1g2g8p3ovr3j30t314lhdt.jpg">';
  • </script>
  • <iframe
  • referrerpolicy="no-referrer"
  • src="javascript:parent.sina"
  • scrolling="no"
  • frameborder="0"
  • onload="iframeLoaded(this)">
  • </iframe>

后端

Referrer-Policy

方式四,通过 NgnixApache 等 Web 服务器,直接告诉浏览器 Referrer-Policy: no-referrer,效果同方式一,意味着有相同的副作用。

Nginx

  • add_header Referrer-Policy no-referrer;

Apache

  • Header always set Referrer-Policy "no-referrer"

反向代理

方式五,反代,让后端构造任意 referrer,如 referrer=https://m.weibo.cn 获取图片,转发给前端,这样前端就无需任何配置,也就不会产生副作用。

可以用自己的 服务器CDNCloudflare 等搭建反代,也可使用如下第三方代理。

  • <!-- 新浪官方未加验证域名 -->
  • <img src="//tva1.sinaimg.cn/large/007iuyE8gy1g2g8p3ovr3j30t314lhdt.jpg">
  • <!-- Wordpress 官方反代 -->
  • <img src="//i0.wp.com/wx4.sinaimg.cn/large/007iuyE8gy1g2g8p3ovr3j30t314lhdt.jpg">
  • <!-- 百度图片搜索反代 -->
  • <img src="//image.baidu.com/search/down?tn=download&url=https://wx4.sinaimg.cn/large/007iuyE8gy1g2g8p3ovr3j30t314lhdt.jpg">

替换链接

有了反代服务器后就要把站点所有新浪图片都替换成反代链接。

服务器替换

可通过 NginxApache 插件实时检查。我没有动力详细介绍,读者可参考 Nginx 内容替换模块 http_substitutions_filter_module 实用案例分享使用 mod_ext_filter 组件在 Apache 中实现输出内容的替换,为所有页面增加统计功能

下面是 ngx_http_substitutions_filter_module 的配置示例,这个模块要自行编译安装。

  • sub_filter '[0-9a-z]{3}.sinaimg.cn/large/' 'i0.wp.com/wx4.sinaimg.cn/large/' ir;

数据库替换

如果不熟悉 Nginx 编译安装,可以使用数据库替换的方法,Typecho 参考 Typecho 网站域名更换方法,Wordpress 参考 WordPress 迁移站点更换域名为新域名的 N 种方法。注意备份数据库,执行命令时仔细甄别表名,字段名,不可无脑操作。

浏览器替换展开目录

如果以上内容都不熟悉,可直接使用 JS 代码在浏览器替换。对于 本主题,依次进入 控制台 - 外观 - 设置外观 - 主题自定义扩展,将代码加入到 自定义 HTML 元素拓展 - 标签: head 头部 (meta 元素后)。其他主题,加入到主题对应的 header.php 中的 </head> 标签前。

  • <script>
  • // 临时替换新浪图床为反代链接
  • document.addEventListener('DOMContentLoaded', initSinaProxy);
  • function initSinaProxy() {
  • var sinaImgs = document.querySelectorAll('img[src*="sinaimg.cn"]');
  • for (var i = 0; i < sinaImgs.length; i++) {
  • var img = sinaImgs[i];
  • img.src = '//tva1.sinaimg.cn/large/' + img.src.split('/').pop();
  • }
  • }
  • </script>

如果你开启了 PJAX,可能需要单独加入回调函数。对于本主题,依次进入 控制台 - 外观 - 设置外观 - PJAX(BETA) - PJAX RELOAD,将 initSinaProxy(); 添加进入即可。

迁移展开目录

前面说了这么多 Linux 操作,还是挺麻烦的,关键是我没有动力详细写,如有困难可留言,我宁愿直接操作服务器。TypechoWordpress 用户可使用链接中的迁移工具简化操作。

最后,今后一定要将所有图片放到自己的 CDN,同时在其他地方按文章名称建立备份文件夹,以防数据丢失。

TG 大佬群 QQ 大佬群

最后编辑于: 2020 年 02 月 24 日
返回文章列表 文章二维码
本页链接的二维码
打赏二维码
添加新评论

Loading captcha...

  • OωO
  • |´・ω・)ノ
  • ヾ(≧∇≦*)ゝ
  • (☆ω☆)
  • (╯‵□′)╯︵┴─┴
  •  ̄﹃ ̄
  • (/ω\)
  • ∠( ᐛ 」∠)_
  • (๑•̀ㅁ•́ฅ)
  • →_→
  • ୧(๑•̀⌄•́๑)૭
  • ٩(ˊᗜˋ*)و
  • (ノ°ο°)ノ
  • (´இ皿இ`)
  • ⌇●﹏●⌇
  • (ฅ´ω`ฅ)
  • (╯°A°)╯︵○○○
  • φ( ̄∇ ̄o)
  • ヾ(´・ ・`。)ノ"
  • ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
  • (ó﹏ò。)
  • Σ(っ °Д °;)っ
  • ( ,,´・ω・)ノ"(´っω・`。)
  • ╮(╯▽╰)╭
  • o(*////▽////*)q
  • >﹏<
  • ( ๑´•ω•) "(ㆆᴗㆆ)
  • (。•ˇ‸ˇ•。)
  • 泡泡
  • 阿鲁
  • 蛆音娘
  • 小埋
  • 颜文字

已有 22 条评论
  1. 强调几点:(该留言由系统自动生成!)
    1. 请不要刷广告,本站没有流量!
    2. 我不回复虚假邮箱,因为回复了你也看不到!
    3. 存在必须回复的隐藏内容时,可以直接使用表情框里的阿鲁表情!

  1. 于长野 于长野   Android 10  WebView 4.0

    以前图站就是用的新浪图床,后来有一阵子链接不断失效,https 不能用了,ws 开头的域名图片失效,手动改成 wx 开头子域名还能用,https://picture.rabithua.club/index.php/archives/131/
    刚刚看了看还在~
    不过我是真的怕了,后来的图片都放腾讯云 cos 了,最后,腾讯云 cos 免费额度真香!quyin 1huaji

    1. LOGI LOGI   Windows 10 x64 Edition  Google Chrome 80.0.3987.116

      @于长野优秀,以后壁纸从大佬这拿了

  2. 啊立 啊立   Windows 10 x64 Edition  Google Chrome 80.0.3987.122

    大佬,你博客的商店的支付下单页面是怎么做的呀,有啥第三方提供源码的吗

  3. 梁生 梁生   Windows 10 x64 Edition  Google Chrome 78.0.3904.70

    您好,仔细看了你的文章。我的站点是 wordpress 博客,微博图片很多,目前用的第二种方式做成 JS 代码放在页面底部。
    看了你的介绍后,我把你的代码放在页面头部 head 部分,测试对 IE 浏览器有效。但是目前有个麻烦,换成这段代码后 wordpress 文章列表的缩略图不显示了,这是怎么回事?
    您知道怎么解决吗?可以有偿发红包...

    1. LOGI LOGI   Android 9  Google Chrome 80.0.3987.117

      @梁生加文末群组找我

  4. 梁生 梁生   Windows 10 x64 Edition  Google Chrome 78.0.3904.70

    您好,仔细看了你的文章。我的站点是 wordpress 博客,微博图片很多,目前用的第二种方式做成 JS 代码放在页面底部。
    看了你的介绍后,我把你的代码放在页面头部 head 部分,测试对 IE 浏览器有效。但是目前有个麻烦,换成这段代码后 wordpress 文章列表的缩略图不显示了,这是怎么回事?
    您知道怎么解决吗?可以有偿发红包...

  5. sora sora   iOS 13.3.1  Safari 13.0.1

    这一篇文章被百度抓取了,而我的垃圾站谷歌抓爆了,百度都不鸟我

    1. LOGI LOGI   Windows 10 x64 Edition  Google Chrome 80.0.3987.116

      @sora 得手动提交,它还不一定接受,主要靠互访

    2. sora sora   iOS 13.3.1  Safari 13.0.5

      @LOGI 那还是不管他了,顺便问一下,博客收到回复发邮件怎么弄的quyin 1huaji

    3. LOGI LOGI   Windows 10 x64 Edition  Google Chrome 80.0.3987.116

      @sorahttps://logi.im/blog/comment-to-email.html

  6. 团子 团子   Windows 10 x64 Edition  QQ 浏览器 10.5.3863.400

    不容易啊终于有 cdn 速度快一截

    1. LOGI LOGI   Windows 10 x64 Edition  Google Chrome 80.0.3987.116

      @团子是吗

  7. 初夏阳光 初夏阳光   Windows 10 x64 Edition  Google Chrome 79.0.3945.130

    说得好,我选择放在阿里 OSS。香香香

    1. LOGI LOGI   Windows 10 x64 Edition  Google Chrome 80.0.3987.116

      @初夏阳光

  8. 小童 小童   Windows 10 x64 Edition  Google Chrome 79.0.3945.130

    大佬太棒了,我在网上找寻到方式一和方式四奈何太小白完全不懂代码怎么加,辛亏有最后一种方式简单直接,已经成功啦

    1. LOGI LOGI   Windows 10 x64 Edition  Google Chrome 80.0.3987.116

      @小童很高兴能帮到你

  9. 未央花 未央花   Windows 10 x64 Edition  QQ 浏览器 10.5.3863.400

    老哥,就是你文章末尾,那 4 个类似标签是怎么弄得?quyin doubt

    1. LOGI LOGI   Windows 10 x64 Edition  Google Chrome 80.0.3987.116

      @未央花写文章的时候,右侧有添加标签呀quyin witty

    2. 未央花 未央花   Windows 10 x64 Edition  QQ 浏览器 10.5.3863.400

      @LOGIquyin hematemesis 才入坑,用的少,竟然没注意这个的用途。谢啦quyin feizao

  10. Dan Dan   Windows 10 x64 Edition  QQ 浏览器 10.5.3751.400

    那个微软的网盘 还能免费扩容么?

    1. LOGI LOGI   Windows 10 x64 Edition  Google Chrome 80.0.3987.116

      @Dan 管理员可以

  11. 小童 小童   Windows 10 x64 Edition  Google Chrome 79.0.3945.130

    感谢大佬,我仔细琢磨琢磨试试~