利用 Netlify Functions 破解图片防盗链
《Acid 免责声明》/ Acid Disclaimer
《Acid 免责声明》
- 性质声明
Acid 仅为技术演示工具,所有请求均模拟浏览器行为,不修改、不存储任何目标网站数据。 - 合法使用
禁止用于:- 绕过付费内容限制
- 攻击性爬虫
- 违反《计算机信息网络国际联网安全保护管理办法》的行为
- 即时失效
部分网站可能随时升级防护,导致工具失效,不提供维护承诺。 - 风险警示
使用后若出现:- IP 被目标站封禁
- 法律风险
需自行承担全部责任。
Acid Disclaimer
- Nature
Acid is a technical demo ONLY. It simulates browser requests without modifying/storing any target site data. - Legal Use
Prohibited for:- Bypassing paywalls
- Aggressive scraping
- Violating cybersecurity laws
- No Guarantee
Tool may break if targets update protections. No maintenance promised. - Warning
You risk:- IP bans by targets
- Legal consequences
All liabilities are on you.
Copyright 2025 by PanDaoxi.
我无意中翻到了曾经的文章《在线文档 Docsify 的简单应用 | PanDaoxi 的博客》,发现文章中提到:
由于文章太多,不能一个个地把图片弄下来,也不能手动修改每一个错误的文件名。
所以我使用了 Python 做批处理的活。这个 Python 文件的目的有以下几个:
- 匹配图片,替换图片;
- 修改文件名。
Luckily,我发现一个可以反防盗链的 API。只需要在链接前面添加上 https://pic.2ge.org/cdn/?url= 即可。
如此关键技术,岂能受制于人!
所以我就自己写了一个 netlify functions
接口,实现这个功能。
仓库见 https://github.com/PanDaoxi/acid;部署方法请参考 https://github.com/PanDaoxi/PicFlare/blob/master/README.md。
这个程序主要是 deepseek 写的,我略微优化了一下。以下是 deepseek 对于我的程序的解释:
它就像个「超级变装间谍」
- 任务:帮你去别人网站“偷”图片(比如 CSDN 的图)
- 难点:对方保安(防盗链系统)会检查:
- 你是不是从自家网站跳转来的(
Referer
头)- 你用的是不是正规浏览器(
User-Agent
头)- 你的 IP 是不是黑名单里的(比如海外 IP)
间谍的破解手段
第一招:伪装来源
假装是从百度/谷歌跳转来的(改
Referer
)
1 headers: { 'Referer': 'https://www.baidu.com' }第二招:换浏览器皮肤
假装自己是 Chrome 浏览器(改
User-Agent
)
1 headers: { 'User-Agent': 'Mozilla/5.0 (Chrome...)' }第三招:伪造身份证
用中国 IP 地址(随机生成国内 IP)
1 headers: { 'X-Forwarded-For': '116.25.123.45' }终极绝招:多套方案轮流试
- 如果第一套伪装失败,自动换第二套方案
- 就像间谍被识破后立刻换新身份
程序工作流程
flowchart A[你] -->|给我这个图片:https:\/\/xxx.jpg| B(acid) B -->|尝试方案 1:假装来自谷歌| C[目标网站] C -->|403 禁止访问!| B B -->|尝试方案 2:假装来自百度 + 中国 IP| C C -->|200 OK & 图片数据| B B -->|返回图片| A为什么不会崩溃?
- 每步都有备用方案
- 就像间谍随身带 5 本不同护照
- 连错误都有应对
- 如果所有方案都失败,至少返回一张错误提示图
- 自动维护工具
- 定期更新伪装参数(比如更换最新浏览器版本号)
实际效果
- 输入:
https://acid.daoxi365.dpdns.org/proxy?url=图片地址
- 输出:直接显示被保护的图片
- 成功率:绝大部分常见网站都能突破
简单说,它就是通过不断变换伪装身份,骗过网站的防盗链检查!
核心的程序就是 functions/proxy/proxy.js
,本质上是个代理程序。如下:
1 | // 工具函数定义 |
(可能由于更新会有些变动。)
例子:
1 | https://i-blog.csdnimg.cn/img_convert/e59df5717e5e79f83b1090827e593e78.png |
其实,如果你把它当成代理用,也当然可以;
你甚至可以访问 https://acid.daoxi365.dpdns.org/api/proxy?url=https://github.com/PanDaoxi/acid,这一页面也可以正常加载!
(仅限于部分页面。如我的博客使用大量的相对路径,这就会导致 404 Not Found。)