PHP防盗链代码实例

PHP防盗链是在服务器判断HTTP请求来源,如果来源不合法就拒绝请求,从而保护原服务器资源不被其他恶意网站盗链的技术手段。具体实现方法如下:

1. 设置HTTP_REFERER

在HTTP请求头中的Referer字段,记录了请求来源的信息,其值为当前请求的URL。可以通过判断该字段的值是否符合条件,来判断是否为合法请求。比如以下PHP代码示例中,使用$_SERVER['HTTP_REFERER']获取请求的来源,然后通过strpos函数检测Referer中是否包含了指定的合法域名,如果包含则允许访问,否则拒绝访问。

$referer = $_SERVER['HTTP_REFERER'];
if(strpos($referer, 'example.com') !== false){
    // 合法请求,允许访问
}else{
    // 非法请求,拒绝访问
    header("HTTP/1.1 403 Forbidden");
    exit;
}

2. 动态生成防盗链链接

如果将防盗链代码硬编码在页面中,容易被恶意网站绕过。为了增加防盗链的难度,我们可以使用服务器端动态生成防盗链链接。比如以下PHP代码示例中,通过生成带有加密参数的URL,访问者必须先解密参数,才能访问资源,从而增加了防盗链的难度。

$file_path = '/path/to/file'; // 文件路径
$secret_key = 'abcdefg'; // 秘钥

// 生成防盗链链接
function getAntiLeechUrl($file_path, $secret_key)
{
    $timestamp = time();
    $url = 'http://example.com' . $file_path . '?t=' . $timestamp;
    $enc = md5($secret_key . $url . $timestamp);
    return $url . '&e=' . $enc;
}

// 判断是否为合法请求
function isValidRequest($file_path, $secret_key)
{
    $referer = $_SERVER['HTTP_REFERER'];
    if(strpos($referer, 'example.com') !== false){
        $url = 'http://example.com' . $file_path;
        $timestamp = $_GET['t'];
        $enc = $_GET['e'];
        return $enc === md5($secret_key . $url . $timestamp);
    }
    return false;
}

// 检测是否是合法请求
if(isValidRequest($file_path, $secret_key)){
    // 合法请求,输出文件内容
    readfile($file_path);
}else{
    // 非法请求,拒绝访问
    header("HTTP/1.1 403 Forbidden");
    exit;
}

以上两种方法都可以用于防御盗链攻击,并且可以根据需要进行适当的修改来加强安全性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP防盗链代码实例 - Python技术站

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

相关文章

  • PHP 设计模式系列之 specification规格模式

    《PHP 设计模式系列之 Specification 规格模式》是一种常用的设计模式,可以帮助我们更好地组织代码和实现业务逻辑。接下来将详细讲解 Specification 规格模式的完整攻略,包括定义、特征、实现、优缺点等方面。 定义 规格模式是一种软件设计模式,它可以用来描述一个对象是否符合某种特定的规格。规格通常由一组条件或操作符组成,被用于查询、过滤…

    PHP 2023年5月23日
    00
  • php合并数组并保留键值的实现方法

    当我们需要将两个或多个数组合并为一个数组时,可以使用PHP的array_merge()函数。但是,array_merge()函数会重置键名,如果这个键已经被设置,将会被重置为0。所以,如果想要保留键名,可以使用array_replace()函数。以下是使用array_replace()函数进行数组合并并保留键值的实现方法攻略: 第一步:准备数组 我们需要准备…

    PHP 2023年5月26日
    00
  • php数组中包含中文的排序方法

    对于包含中文的PHP数组排序,有两种不同的方法可以实现,分别是使用array_multisort()函数和usort()函数。 使用array_multisort()函数排序 array_multisort()函数是PHP的一个组合排序函数,可以对多组数据进行排序,本方法需要使用此函数实现。 步骤如下: 1.1 类型转换 由于中文排序和字符串排序不同,需要将…

    PHP 2023年5月26日
    00
  • 效率较高的php下读取文本文件的代码 原创

    下面是详细讲解“效率较高的PHP下读取文本文件的代码”的完整攻略: 1. 准备工作 在编写读取文本文件代码之前,需要先准备好文本文件。可以使用任何文本编辑器创建文本文件,例如Notepad++、Sublime Text等。在创建文本文件时需要注意以下几点: 文本文件的编码应当为UTF-8,这是保证中文字符能够被正常读入的前提。 每行文本末尾需要使用回车符和换…

    PHP 2023年5月26日
    00
  • PHP实现PDF转图片的方法详解

    以下是使用PHP实现PDF转图片的方法详解,包含两个示例: 步骤 使用PHP实现PDF转图片的步骤: 安装ImageMagick ImageMagick是种开源软件套件,可以用来创建、编辑转换图像。在使用PHP将PDF转换为图片时,需要安装ImageMagick。 在Ubuntu上,可以使用以下命令安装ImageMagick: sudo apt-get in…

    PHP 2023年5月12日
    00
  • 微信小程序实现点击图片放大预览

    下面是关于微信小程序实现点击图片放大预览的完整攻略: 1. 基本思路 要实现微信小程序上的图片放大预览,我们需要使用微信小程序开发中的 wx.previewImage() 方法,该方法可以让用户点击某张图片后全局预览。 首先,我们需要为每个可点击的图片绑定一个点击事件,并在事件中调用 wx.previewImage() 方法预览图片。 其次,我们需要为每个可…

    PHP 2023年5月23日
    00
  • php实现在多维数组中查找特定value的方法

    要在多维数组中查找特定的值,可以通过递归函数实现。以下是实现该方法的完整攻略: 步骤一:定义递归函数 定义一个递归函数,该函数接受两个参数:要查找的值和要搜索的数组。在函数中,首先判断当前数组是否为多维数组,如果是,则使用递归函数继续搜索。否则,比较当前数组元素的值和要查找的值是否相等,如果相等,则返回该数组元素的键名,否则返回false。 以下是递归函数的…

    PHP 2023年5月26日
    00
  • php中将数组转成字符串并保存到数据库中的函数代码

    下面是详细讲解「PHP中将数组转成字符串并保存到数据库中的函数代码」的攻略: 一、将数组转成字符串 我们可以使用内置的serialize()函数将一个数组序列化成字符串,例如: <?php $arr = array(‘a’ => ‘apple’, ‘b’ => ‘banana’, ‘c’ => ‘cherry’); $str = se…

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