希甲甲 2023-02-26 11:26 采纳率: 0%
浏览 11

thinkPHP如何实现类似oss文件盗链控制?

现在使用的开发框架是thinkPHP6

想实现类似 阿里云oss 文件存储的 防盗链功能。

就是比如 我在网站里面 上传了 一个 3.jpg \ 4.mp4 \ 5.rar 3个文件。
想实现这样的控制,比如 只有 3 。com bd .com 这个的域名请求才能访问。非允许的就拒绝访问。

如果各位朋友,刚好有做过类似的,或者有想法的,劳烦您的小手回复一下。谢谢了。

  • 写回答

3条回答 默认 最新

  • GPT_Pro 2023-02-26 11:37
    关注

    该回答内容部分引用GPT,GPT_Pro更好的解决问题
    使用ThinkPHP 6实现OSS文件盗链控制,可以借助阿里云OSS的Referer白名单功能实现,该功能可以指定哪些Referer地址可以访问OSS中的文件。具体的步骤如下:

    1. 在thinkPHP 6应用中安装阿里云OSS SDK,用来调用阿里云OSS的API。

    2. 创建阿里云OSS存储空间,并上传文件。

    3. 使用阿里云OSS SDK调用putBucketReferer API设置Referer白名单,将允许访问的域名添加到白名单中。

    4. 在应用中使用getObject API来获取文件,如果当前请求的Referer不在白名单中,则会返回403 Forbidden。

    以下是使用ThinkPHP 6实现OSS文件盗链控制的代码示例:

    // 引入阿里云OSS SDK
    use OSS\Core\OssException;
    use OSS\OssClient;
     
    // 配置阿里云OSS的相关信息
    $accessKeyId = "yourAccessKeyId";  // AccessKeyId
    $accessKeySecret = "yourAccessKeySecret";  // AccessKeySecret
    $endpoint = "yourEndpoint";  // 节点地址, 例如: oss-cn-hangzhou.aliyuncs.com
    $bucket= "yourBucketName";  // Bucket名称
     
    // 创建OssClient实例
    $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
     
    // 设置Referer白名单, 允许3.com、bd.com访问存储空间中的文件
    $refererList = array('http://3.com', 'http://bd.com');  // 白名单列表
    $allowEmptyReferer = false;  // 是否允许空Referer, 默认不允许
    try {
        $ossClient->putBucketReferer($bucket, $refererList, $allowEmptyReferer);
    } catch (OssException $e) {  
        printf(__FUNCTION__ . ": FAILED\n");  
        printf($e->getMessage() . "\n");  
        return;  
    }  
    print(__FUNCTION__ . ": OK" . "\n");  
    
     
    // 获取文件, Referer不在白名单中则返回403 Forbidden  
    try {  
        $content = $ossClient->getObject($bucket, $object);  
    } catch (OssException $e) {  
        printf(__FUNCTION__ . ": FAILED\n");  
        printf($e->getMessage() . "\n");  
        return;  
    }  
    print(__FUNCTION__ . ": OK" . "\n"); 
    

    如果回答有帮助,望采纳。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月26日