php简单防盗链实现方法

下面是详细讲解PHP简单防盗链实现方法的攻略:

什么是防盗链

防盗链是指在网站运营过程中,因为其他站点未经允许地使用了网站的图片、视频、音频等内容或者链接,直接调用了相关资源而占用了网站服务器带宽和资源,导致网站性能下降或者出现其他问题。为了解决这一问题,网站可以通过一定技术手段,对盗链行为进行识别并拒绝服务。

PHP简单防盗链实现方法

第一步:获取请求头referer信息

referer是一个HTTP头部字段,指示了产生了该请求的源URI。可以通过PHP中的$_SERVER['HTTP_REFERER']获取该信息。

示例代码:

$referer = $_SERVER['HTTP_REFERER'];

第二步:判断referer信息是否符合规则

针对盗链情况,可以设定一定规则,比如只允许某些站点调用资源,或者在某些情况下允许所有站点调用。通过判断referer是否符合规则,来确认是否允许访问。

示例代码:

// 允许所有来源站点
$allow = array();

if (empty($referer)) {
    // 没有referer,判定为不合法
    die('不合法请求');
}

$parse_url = parse_url($referer);
if (!isset($parse_url['host'])) {
    // 解析不出host,判定为不合法
    die('不合法请求');
}

$host = $parse_url['host'];
if (!in_array($host, $allow)) {
    // 不在允许的站点列表中,判定为不合法
    die('不合法请求');
}

第三步:返回资源

如果通过判断,referer信息符合规则,就可以返回相应资源了。将资源输出到浏览器即可。

示例代码:

// 输出图片
header("Content-type: image/jpeg");
readfile('/path/to/image.jpg');

// 输出视频
header("Content-Type: video/mp4");
readfile('/path/to/video.mp4');

示例说明

示例一:只允许特定站点调用图片资源

假设网站仅允许https://example.com站点调用图片资源。则可以将$allow的值设置为['example.com']。

$allow = array('example.com');

$referer = $_SERVER['HTTP_REFERER'];
if (empty($referer)) {
    // 没有referer,判定为不合法
    die('不合法请求');
}

$parse_url = parse_url($referer);
if (!isset($parse_url['host'])) {
    // 解析不出host,判定为不合法
    die('不合法请求');
}

$host = $parse_url['host'];
if (!in_array($host, $allow)) {
    // 不在允许的站点列表中,判定为不合法
    die('不合法请求');
}

// 输出图片
header("Content-type: image/jpeg");
readfile('/path/to/image.jpg');

示例二:允许所有站点调用视频资源

假设网站允许所有站点调用视频资源。则可以将$allow的值设置为空数组。

$allow = array();

$referer = $_SERVER['HTTP_REFERER'];
if (empty($referer)) {
    // 没有referer,判定为不合法
    die('不合法请求');
}

$parse_url = parse_url($referer);
if (!isset($parse_url['host'])) {
    // 解析不出host,判定为不合法
    die('不合法请求');
}

$host = $parse_url['host'];
if (!in_array($host, $allow)) {
    // 不在允许的站点列表中,判定为不合法
    die('不合法请求');
}

// 输出视频
header("Content-Type: video/mp4");
readfile('/path/to/video.mp4');

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

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • php反序列化之魔术方法超详细讲解

    以下是关于“PHP反序列化之魔术方法超详细讲解”的完整使用攻略: 基础知识 在了解PHP反序列化之魔术方法之前,需要掌握一些基础知识,包括序列化和反序列化的基本概念、PHP中的魔术方法等。以下是一些常见的基础知识: 序列化和反序列化的基本概念,包括序列化和反序列化的定义、序列化和反序列化的过程等。 PHP中的魔术方法,包括__sleep()、__wakeup…

    PHP 2023年5月12日
    00
  • PHP自带函数给数字或字符串自动补齐位数

    使用函数str_pad PHP自带的函数str_pad可以在字符串左侧或右侧自动补齐指定的字符,使字符串达到指定的长度,如将数字前面补0使得它们具有相同的位数。函数格式为:str_pad($string, $new_length, $pad_string, $type)。 参数解释:- $string:原字符串。- $new_length:字符串最终的长度。…

    PHP 2023年5月26日
    00
  • php关联数组与索引数组及其显示方法

    关于PHP数组的使用确实需要掌握一些基础知识。下面我通过分别介绍关联数组和索引数组,并且针对它们的不同显示方法,向你提供一些示例来进行解释。 什么是PHP数组 在PHP中,数组是一种非常有用的数据结构,用于存储一组数据。其中,数据可以是任意类型。PHP数组中的每个元素都有一个键和一个值。 PHP索引数组 PHP索引数组是通过数字键来访问其元素的数组。数字键用…

    PHP 2023年5月26日
    00
  • PHP xpath()函数讲解

    PHP xpath()函数讲解 概述 xpath()函数是PHP DOM扩展提供的一种解析XML文档的方式,可以遍历XML文档中的节点,查询节点的属性和内容。它是一个非常强大和灵活的函数,可以方便地根据特定的条件查询XML文档中的节点。 函数原型 mixed xpath ( string $path ) 参数 path : 必需。要查询的XPath表达式。 …

    PHP 2023年5月26日
    00
  • PHP中的正规表达式(一)

    PHP中的正则表达式十分重要,在字符串处理、数据提取等方面有着广泛运用。本篇攻略将对PHP中的正则表达式做详细讲解。 什么是正则表达式 正则表达式是一种字符串模式,用来描述匹配一系列符合某个句法规则的字符串。在PHP中,正则表达式用来处理字符串相关的操作,如过滤、替换和搜索,是一个强大的工具。 正则表达式的基础语法 正则表达式主要由原子和元字符构成: 原子:…

    PHP 2023年5月23日
    00
  • PHP数组对比函数,存在交集则返回真,否则返回假

    PHP提供了一些方便快捷的数组对比函数,用于比较数组之间的差异。其中,判断两个数组是否有交集的函数是array_intersect()。 array_intersect()函数的用法 array_intersect()函数接受两个或多个数组作为参数,返回一个新的数组,该数组包含在所有给定数组中出现的值。如果没有交集,返回一个空数组。 array_inters…

    PHP 2023年5月26日
    00
  • php中substr()函数参数说明及用法实例

    关于“php中substr()函数参数说明及用法实例”的攻略说明如下: substr()函数参数说明 substr()函数是PHP中常用的字符串处理函数,它用来截取字符串的一部分并返回。其函数原型:substr(string $string, int $start, ?int $length = null)。其中各个参数的含义如下: $string:需要处理…

    PHP 2023年5月26日
    00
  • Json_decode 解析json字符串为NULL的解决方法(必看)

    Json_decode 解析json字符串为NULL的解决方法(必看) 问题描述 在使用 json_decode() 函数将 JSON 字符串解析为 PHP 变量时,如果出现 JSON 字符串为 NULL 的情况,解析后也会返回 NULL,这时无法正确获取 JSON 中的数据。 解决方法 为了解决此问题,可以使用 json_last_error() 函数获取…

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