为了防止恶意网站站点盗取自己的资源,很多网站都会设置防盗链,限制只有自己网站的页面可以访问这些资源。其中一个最常用的防盗链方式是检测请求的referer字段,如果不符合条件则拒绝访问。referer字段记录了当前请求来源的URL地址,一般情况下只有在通过链接点击进入目标页面时referer才会非空。
而某些网站会允许访问者通过空referer字段访问一些资源,可以通过JavaScript代码破解这样的防盗链机制。下面是实现这种破解代码的步骤:
- 发起一次请求,获取响应对象。
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/xxx.jpg', true);
xhr.send(null);
- 设置当前页面访问xxx.jpg的referer字段为空。
xhr.setRequestHeader('Referer', '');
- 将响应对象的responseType属性设置为'blob',以便获取二进制数据的Blob对象。
xhr.responseType = 'blob';
- 当服务器成功响应后,使用URL.createObjectURL()方法获取Blob对象的URL。
xhr.onload = function() {
if (this.status == 200) {
var imgBlob = this.response;
var imgURL = URL.createObjectURL(imgBlob);
var img = document.createElement('img');
img.src = imgURL;
document.body.appendChild(img);
}
};
这样,就可以成功在页面上加载防盗链图片。
下面是两个示例:
- 支持空referer的网站示例:https://www.linuxidc.com/upload/2019_09/190926143561052.jpg
在该网站上,任何页面都可以通过空referer字段进行访问。可以使用下面的JavaScript代码破解防盗链并在页面上显示图片:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://www.linuxidc.com/upload/2019_09/190926143561052.jpg', true);
xhr.setRequestHeader('Referer', '');
xhr.responseType = 'blob';
xhr.onload = function() {
if (this.status == 200) {
var imgBlob = this.response;
var imgURL = URL.createObjectURL(imgBlob);
var img = document.createElement('img');
img.src = imgURL;
document.body.appendChild(img);
}
};
xhr.send(null);
- 不支持空referer的网站示例:https://img-blog.csdn.net/20180814091815280?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3F6aGxvbmc5OTk2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80
在该网站上,只有从特定页面才能访问图片。通过referer字段检测,如果当前请求的referer不正确,则返回403错误。因此,即使使用上面的JavaScript代码也无法成功加载图片。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:部分网站允许空白referer的防盗链图片的js破解代码 - Python技术站