XiaBee's Studio.

微博图床抢救

字数统计: 862阅读时长: 3 min
2023/02/16

省流

项目地址:https://github.com/xiabee/SinaDownLoad

背景

之前博客一直白嫖的微博图床,图它免费,而且 CDN 速度快,而且通过 “微博图床” 插件就可以直接一键上传图片,非常方便。

然而,不知某天之后,微博对所有的图片进行了外链限制,直接访问图片会返回 403,只有从微博内访问才能正常打开……比如这张图片:xiabee 唱歌,直接点击链接是打不开的,会返回如下提示:

然后我的博客在抢救之前,所有的图都变成了上面的亚子……全都403,一张都么得(心态崩溃.jpg)

当然,作为 CTF 选手,这种限制还是很容易绕过的。我们随便在微博内打开一张图片,能看到请求头中携带了来自微博的 Referer:这个 Referer 用于告诉微博图床,“请求是自己人”,然后图床接受到这个消息,允许通过,就能正常查看图片了。

按照这个逻辑,我们只要在每次访问图床的时候都带上这个 Referer,就能正常浏览图片了……对于 CTF 老油条来说,这个操作很简单,带个插件就行,但是考虑到我的博客里有一些小白,大概率不会操作,那就只能想办法换个图床了。

图片抢救

在换图床之前,我需要把之前存放在微博图床中的图下载下来(因为没有存本地备份)。然而如果每篇博客都得手动翻阅、找到图片链接、手动下载的话,可能现在这篇博客需要再等个几年才能发出来……所以我写了个自动化的程序,批量下载图片。

简单介绍一下核心模块:

downLoad.go:下载图片。在请求头中添加 Referer,使得程序能够正常访问微博图床;利用 os.Create 等在本地写入图片内容

1
2
3
4
5
6
7
unc DownLoad(url string, dir string, outFile string) error {
...
request.Header.Set("Referer", "https://weibo.com/")
...
out, err := os.Create(pwdProc + dirProc + outFile)
...
}

fileProc.go:输入目录路径,遍历其内部文件,返回给 urlProc

1
2
3
4
5
6
7
8
9
10
11
12
func GetFileName(root string) ([]string, error) {
var files []string

err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if !IsDir(path) {
files = append(files, path)
}
return nil
})

return files, err
}

urlProc.go:输入文件,遍历文件内容,通过正则匹配找到图片 url,返回给 downLoad.go

1
2
3
regImg := "(img|image|imag)"
regUrl := "(ht|f)tp(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\'\\/\\\\+&%$#_]*)?"
// regexp to find image URI and URL

然后用这个脚本就把我在微博里的全部图片下载下来了:

然后就是更换图床的事情辣!

图床更换

考虑到免费的图床的很可能跑路这件事,我还是决定花钱买心安,直接上付费云存储。

再考虑到国内某些云价格太贵,我们直接换到了 AWS S3,具体的费用情况还可以,乱七八糟的服务加起来一个月几块钱的亚子,如果只考虑存储用的 S3,会更便宜

AWS S3 图床的具体使用方法可以参考这篇博客:AWS S3+CloudFront 打造自己的图床

CATALOG
  1. 1. 省流
  2. 2. 背景
  3. 3. 图片抢救
  4. 4. 图床更换