为了防止恶意网站站点盗取自己的资源,很多网站都会设置防盗链,限制只有自己网站的页面可以访问这些资源。其中一个最常用的防盗链方式是检测请求的referer字段,如果不符合条件则拒绝访问。referer字段记录了当前请求来源的URL地址,一般
为了防止恶意网站站点盗取自己的资源,很多网站都会设置防盗链,限制只有自己网站的页面可以访问这些资源。其中一个最常用的防盗链方式是检测请求的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破解代码
基础教程推荐
猜你喜欢
- 解决Netty解码http请求获取URL乱码问题 2022-12-03
- Java实现简单班级管理系统 2022-11-05
- SpringBoot深入讲解单元测试与热部署应用 2023-02-05
- IDEA快捷键和各种实用功能小结 2023-04-12
- Spring MVC之DispatcherServlet_动力节点Java学院整理 2023-07-31
- 详解Spring Controller autowired Request变量 2023-08-01
- Maven分步详解多环境配置与应用流程 2023-04-18
- SpringBoot+hutool实现图片验证码 2023-04-17
- Spring学习JdbcTemplate数据库事务参数 2022-11-25
- java spring MappingJacksonJsonView在mongodb ObjectId上没有做toString 2023-11-03