今天收到一个任务:要求破解别人网站的图片防盗链。我搜索了一下,了解到目前市面上的大致方法主要有:javascript
进一步分析,这些方案都是在利用空referrer不触发防盗链机制这个特征。我的总以为以上的方法都有点小题大作,且改动也比较大。因而,本身翻阅了一下资料,实现了利用service worker来破解防盗链的方案。php
这里摘抄网上一个篇介绍,简明扼要:java
service worker 是独立于当前页面的一段运行在浏览器后台进程里的脚本。node
service worker不须要用户打开 web页面,也不须要其余交互,异步地运行在一个彻底独立的上下文环境,不会对主线程形成阻塞。基于service worker能够实现消息推送,静默更新以及地理围栏等服务。git
感兴趣的朋友请参见:github
if (navigator.serviceWorker) {
navigator.serviceWorker.register('service-worker.js').then(function (registration) {
console.log('service worker 注册成功');
}).catch(function (err) {
console.log('servcie worker 注册失败')
});
}复制代码
var domain = "http://mmbiz.qpic.cn";//domain是须要破解有防盗链地址的域名。
self.addEventListener('fetch', function (e) {
if (e.request.url.indexOf(domain) >= 0) {
var req = e.request.clone();
var returnUrl = req.url;
e.respondWith(
fetch(returnUrl, {
referrer: "", //经过设置referrer为空,骗过利用referrer实现防盗链的网站
mode: 'no-cors'
})
);
}
});复制代码
有网友反馈注册失败(见评论),这里重点摘抄出来,注明一下,但愿引发你们注意。具体请参考:developer.mozilla.org/zh-CN/docs/…web
1. 你没有在 HTTPS 下运行你的程序
1. service worker文件的地址没有写对— 须要相对于 origin , 而不是 app 的根目录...
1. service worker 在不一样的 origin 而不是你的app的,这是不被容许的。复制代码