部分网站允许空白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日

相关文章

  • 基于javaweb+jsp实现企业车辆管理系统

    下面来分享一下实现企业车辆管理系统的攻略。 1.准备工作 在开始实现之前,必须要了解相关技术和工具。具体包括: JavaSE知识:掌握JavaSE基础知识和编程技巧。 JavaWeb知识:掌握Servlet、JSP、JDBC、Tomcat 服务器等Web开发技术。 数据库技术:熟练掌握SQL语言、Oracle和MySQL等数据库的使用。 开发工具:Eclip…

    Java 2023年5月24日
    00
  • JSP静态导入与动态导入使用详解

    JSP静态导入与动态导入使用详解 1.什么是JSP导入 在JSP页面中,我们经常需要调用其他Java类中的方法或属性。为了方便起见,JSP提供了导入功能。 2. 静态导入 静态导入是在JSP页面中导入Java中的某个类中的静态属性或方法。 2.1 静态导入语法 <%@ page import="static java.lang.Math.*&…

    Java 2023年6月15日
    00
  • Java二维数组计算集合总结

    下面是关于Java二维数组计算集合总结的完整攻略: 概述 二维数组是Java中常见的数据结构之一,它可以用来表示一个表格或矩阵,通常由若干行和列组成。本次总结主要针对二维数组的计算集合操作,包括对行、列进行计算,以及筛选出符合条件的行或列等。本文的示例代码基于Java 8编写。 创建二维数组 在Java中,我们可以使用如下方式创建二维数组: int[][] …

    Java 2023年5月26日
    00
  • Java实现创建Zip压缩包并写入文件

    下面是详细讲解Java实现创建Zip压缩包并写入文件的完整攻略: 1. ZipOutputStream Java中可以使用ZipOutputStream类来实现创建Zip压缩包,并写入文件。ZipOutputStream是OutputStream类的子类,因此我们可以将需要进行压缩的文件写入ZipOutputStream,再通过ZipOutputStream…

    Java 2023年5月19日
    00
  • 实例详解Java中如何对方法进行调用

    下面我将为您详细讲解“实例详解Java中如何对方法进行调用”的完整攻略。 什么是Java方法? 在Java中,方法指的是一段可重复使用的代码块,它可以接收零个、一个或多个参数,并在执行完毕后返回一个值。Java中的方法如同其他编程语言中的函数或子程序一样,它们担任着封装和抽象的重要角色。 方法的调用 在Java中调用方法需要两个要素:方法名和参数。方法名是方…

    Java 2023年5月26日
    00
  • SpringBoot+SpringSecurity实现基于真实数据的授权认证

    下面是“SpringBoot+SpringSecurity实现基于真实数据的授权认证”的完整攻略: 1. 简介 Spring Security 是 Spring 社区中安全领域的一部分,它提供了强大且可高度定制化的身份验证和授权框架。同时,Spring Security 还可以与 Spring 的其他模块轻松集成,比如:Spring Boot、Spring …

    Java 2023年5月20日
    00
  • 使用Nginx+Tomcat实现负载均衡的全过程

    使用Nginx+Tomcat实现负载均衡的全过程主要包括以下几个步骤: 安装Nginx和Tomcat 首先需要在服务器上安装Nginx和Tomcat,Nginx用于反向代理以及负载均衡,Tomcat用于部署应用程序; 安装Nginx和Tomcat可以参考官方文档进行操作,也可以在Ubuntu上通过apt-get命令进行安装,示例命令如下: shell sud…

    Java 2023年5月19日
    00
  • java中字符串与日期的转换实例

    我们来详细讲解一下“java中字符串与日期的转换实例”的完整攻略。 1. 字符串转日期 在Java中,可以用SimpleDateFormat类的parse方法来将字符串转换成日期对象。具体步骤如下: (1)创建SimpleDateFormat实例: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-…

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