部分网站允许空白referer的防盗链图片的js破解代码

为了防止恶意网站站点盗取自己的资源,很多网站都会设置防盗链,限制只有自己网站的页面可以访问这些资源。其中一个最常用的防盗链方式是检测请求的referer字段,如果不符合条件则拒绝访问。referer字段记录了当前请求来源的URL地址,一般情况下只有在通过链接点击进入目标页面时referer才会非空。

而某些网站会允许访问者通过空referer字段访问一些资源,可以通过JavaScript代码破解这样的防盗链机制。下面是实现这种破解代码的步骤:

  1. 发起一次请求,获取响应对象。
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/xxx.jpg', true);
xhr.send(null);
  1. 设置当前页面访问xxx.jpg的referer字段为空。
xhr.setRequestHeader('Referer', '');
  1. 将响应对象的responseType属性设置为'blob',以便获取二进制数据的Blob对象。
xhr.responseType = 'blob';
  1. 当服务器成功响应后,使用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);
    }
};

这样,就可以成功在页面上加载防盗链图片。

下面是两个示例:

  1. 支持空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);
  1. 不支持空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技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Java时间轮算法的实现代码示例

    Java时间轮算法是一种实现定时任务调度的算法,它的实现原理是使用一个循环的时间轮来管理任务的执行时间。该算法的效率高、精度高、可靠性高,因此在实际项目中被广泛应用。以下是实现Java时间轮算法的攻略及代码示例。 实现步骤 Java时间轮算法的实现分为以下步骤: 定义时间轮:需要定义时间轮的大小(即时间间隔),以及每个槽(slot)上要执行的任务列表。 初始…

    Java 2023年5月18日
    00
  • 关于Java实现HttpServer模拟前端接口调用

    关于Java实现HttpServer模拟前端接口调用,可以按照以下步骤进行: 一、实现HttpServer 1.引入HttpServer依赖,例如使用Jetty <dependencies> <dependency> <groupId>org.eclipse.jetty</groupId> <artifa…

    Java 2023年5月26日
    00
  • Tomcat9使用免费的Https证书加密网站的方法

    Tomcat9使用免费的Https证书加密网站的方法 Tomcat9是一款流行的Web应用服务器软件,在进行网站开发时,保障用户数据传输安全是必不可少的,并且在互联网时代中,采用Https协议来保障用户数据传输安全也成为了一种标配。免费的Https证书有Let’s Encrypt和SSL For Free,本文将详细介绍Tomcat9如何使用免费的Https…

    Java 2023年6月2日
    00
  • Go java 算法之括号生成示例详解

    Go java 算法之括号生成示例详解 算法介绍 本算法是使用回溯算法来实现的,先在左边放置一个'(‘,再将’)’放置在之前的'(‘后面。在任意时刻,使用的左括号数量都不应超过 n,也就是原本需要生成的数量。 代码实现 public List<String> generateParenthesis(int n) { List<String&…

    Java 2023年5月19日
    00
  • spring security数据库表结构实例代码

    针对你的问题,我将提供一个完整的攻略来讲解“spring security数据库表结构实例代码”,以下是详细步骤: 1. 规划数据库表结构 首先,需要规划出数据库表结构,这是非常关键的一步。在spring security中,需要创建以下几张表: users(用户表) authorities(角色表) groups(组表) group_authorities…

    Java 2023年5月20日
    00
  • Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解

    下面是关于“Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解”的完整攻略: 1. 确认需求和准备工作 首先,我们需要明确需求:将一个指定的网址生成二维码图片,并将其和输入的底部文字添加到一个给定的模板图片上,最终生成一张包含二维码和底部文字的图片。 在开始实现之前,我们需要做一些准备工作: 安装 Node.js 和相关依赖; 准备好模板图片…

    Java 2023年5月30日
    00
  • Java超详细讲解接口的实现与用法

    Java超详细讲解接口的实现与用法 什么是接口 在Java中,接口是一个与类有相似结构的抽象数据类型。与类不同的是,它只定义一组规范,而不实现这些规范。接口中定义的方法没有具体的实现逻辑,只是给出了方法的签名与返回值类型。 接口的定义与实现 定义接口可以使用interface关键字,接口中可以定义方法和属性。接口中的方法是公共的(public),没有方法体(…

    Java 2023年5月18日
    00
  • java中类与对象的使用详情

    下面我将详细介绍“Java中类与对象的使用”。 类与对象的基本概念 在Java中,类是一种抽象的数据类型,它是一组相关属性和方法的集合。而对象则是类的实例化,它可以调用类中定义的方法或访问类中定义的属性。 定义类 定义类的语法格式如下: public class ClassName { // 定义属性 // 定义方法 } 其中,public是访问控制符,表示…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部