PHP实现防盗链的方法分析

PHP实现防盗链的方法分析

什么是防盗链?

防盗链是指在网页制作和浏览时,为防止他人在未经允许情况下盗用自己网站资源,也就是防止其他网站将本站的图片等媒体资源引用到自己的网站上。

PHP实现防盗链的方法

方法一:根据Referrer来判断

在HTTP请求头中,将发送来请求的页面地址和该页面上的链接按照上述格式传送给服务器,这个“发送来请求的页面地址”就是Referrer。

例如:若A网站上有一张图片,B网站引用的时候通过URL的方式指向了A网站的图片,那么在A网站的服务器里,也就是接收方式,服务器判断远程那个网站在调用自己的资源的时候,就会根据请求头中的Referer信息验证调用者是否是合法的网站。

代码示例:

$referer = $_SERVER['HTTP_REFERER'];
// 判断refer是否为空
if (empty($referer)) {
    echo "无referer访问";
    exit;
}
// 解析当前url
$url = parse_url($referer);
// 获取域名
$refererHost = $url['host'];
// 定义被允许的域名
$allowHosts = array('example1.com', 'example2.com');
// 判断访问的是否允许的refer
if (!in_array($refererHost, $allowHosts)) {
    echo "访问来源不允许";
    exit;
}

方法二:直接判断HTTP请求头

这个方法与上面的方法类似,不过是直接判断HTTP请求头部包含的关键字,比如公司名称、域名等。这种方式简单实用,但可以被特定的请求头绕过,需要注意。

代码示例:

if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
    echo "非法访问";
    exit;
}

总结

以上是PHP实现防盗链的两种方法,具体使用什么方法可以根据实际情况来选择。需要注意的一点是,防盗链是不能百分百防止盗链,只能降低盗链的概率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP实现防盗链的方法分析 - Python技术站

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

相关文章

  • Java中的八种基本数据类型详解

    Java中的八种基本数据类型详解 Java中的数据类型包括基本数据类型和引用数据类型,其中基本数据类型有八种,分别是byte、short、int、long、float、double、char和boolean。本篇文章我们将详细介绍这八种数据类型。 byte byte类型占用一个字节(8位),取值范围在-128到127之间。通常用于表示二进制数据,在网络传输和…

    Java 2023年5月26日
    00
  • JPA多数据源分布式事务处理方案

    JPA多数据源分布式事务处理方案需要涉及到以下几个步骤: 配置多数据源 配置事务管理器 编写跨数据源分布式事务代码 具体步骤如下: 配置多数据源 在Spring Boot应用程序中实现多个数据源的方法有很多,这里以使用HikariCP连接池的方式为例。首先在application.properties文件中配置两个数据源: # 第一个数据源 spring.d…

    Java 2023年5月20日
    00
  • Java通俗易懂讲解泛型

    以下是《Java通俗易懂讲解泛型》的完整攻略。 什么是泛型? 泛型是一种让类或方法在定义时,可以指定一些类型参数,以增加代码的灵活性和复用性的机制。Java引入泛型的目的是为了让程序员写出更加安全且健壮的代码,同时减少代码的冗余。 泛型的语法 下面是泛型的语法: class Class_Name<T, U, V…> { // 类定义中使用泛型…

    Java 2023年5月26日
    00
  • SpringBoot整合Security权限控制登录首页

    下面我将详细讲解“SpringBoot整合Security权限控制登录首页”的完整攻略,并给出两个示例来帮助理解。 一、准备工作 1.1 引入依赖 首先,我们需要在pom.xml文件中引入相关依赖: <!– Spring Security依赖 –> <dependency> <groupId>org.springfra…

    Java 2023年5月20日
    00
  • Java Stream API 使代码更出色的操作完全攻略

    Java Stream API 使代码更出色的操作完全攻略 Java Stream API 是一个用于处理集合的 API,它允许以声明性方式处理数据。使用流,我们可以过滤、转换、聚合和排序数据,而无需编写大量的循环和条件语句。本文将教你如何使用 Java Stream API 让你的代码更加简洁和易于理解。 创建流 使用 Java Stream API,我们…

    Java 2023年5月23日
    00
  • Hibernate 的原理与配置

    Hibernate是一个面向对象的Java持久化框架,它的目的是简化数据访问,并提供更好的对象封装性和查询性能。本文将讲解Hibernate的原理与配置,包括Hibernate的核心概念、Hibernate工作流程、Hibernate配置文件以及示例代码。 Hibernate的核心概念 Session:Session代表与数据库的一个会话,它包含了一系列的操…

    Java 2023年5月20日
    00
  • 解决springboot的JPA在Mysql8新增记录失败的问题

    针对Spring Boot的JPA在MySQL 8新增记录失败的问题,可以采取以下步骤进行解决: 问题原因 在MySQL 8的版本中,密码加密方式由以前的mysql_native_password改成了新的加密方式caching_sha2_password,由此就导致了Spring Boot的JPA在MySQL 8新增记录失败的问题。 解决方法 修改MySQ…

    Java 2023年5月20日
    00
  • Java超详细透彻讲解static

    Java超详细透彻讲解static 什么是static 在Java中,static关键字可以用来修饰变量、方法和代码块,它表示这个成员在类中只有一份,不需要创建实例就能访问。也可以说,static修饰的成员属于类本身而不属于对象。 static变量 static变量是在类中使用static关键字来修饰的变量,它是类共享的,对于该类的所有对象来说,static…

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