开发者社区 问答 正文

PHP-SDK - 防盗链之如何实现?

OSS是按使用收费的服务,为了防止用户在OSS上的数据被其他人盗链,OSS支持基于HTTP header中表头字段referer的防盗链方法。
更多关于防盗链的内容请参考 防盗链


提示:
  • 以下场景的完整代码请参见:GitHub


设置Referer白名单


您可以通过OssClient::putBucketReferer设置Referer白名单: <?php
/**
* 设置存储空间的防盗链配置
*
* @param OssClient $ossClient OSSClient实例
* @param string    $bucket 存储空间名称
* @return null
*/
function putBucketReferer($ossClient, $bucket)
{
    $refererConfig = new RefererConfig();
    $refererConfig->setAllowEmptyReferer(true);
    $refererConfig->addReferer("www.aliiyun.com");
    $refererConfig->addReferer("www.aliiyuncs.com");
    try{
        $ossClient->putBucketReferer($bucket, $refererConfig);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}


提示:
  • Referer参数支持通配符“*”和“?”,更多详细的规则配置可以参考产品文档 OSS防盗链


获取Referer白名单


您可以通过OssClient::getBucketReferer获取Referer白名单: <?php
/**
* 获取bucket的防盗链配置
*
* @param OssClient $ossClient OSSClient实例
* @param string    $bucket 存储空间名称
* @return null
*/
function getBucketReferer($ossClient, $bucket)
{
    $refererConfig = null;
    try{
        $refererConfig = $ossClient->getBucketReferer($bucket);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
    print($refererConfig->serializeToXml() . "\n");
}



清空Referer白名单


Referer白名单不能直接清空,只能通过重新设置来覆盖之前的规则。 <?php
/**
* 删除bucket的防盗链配置
* Referer白名单不能直接清空,只能通过重新设置来覆盖之前的规则。
*
* @param OssClient $ossClient OSSClient实例
* @param string    $bucket 存储空间名称
* @return null
*/
function deleteBucketReferer($ossClient, $bucket)
{
    $refererConfig = new RefererConfig();
    try{
        $ossClient->putBucketReferer($bucket, $refererConfig);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}


展开
收起
青衫无名 2017-10-19 10:10:35 1783 分享 版权
阿里云 AI 助理回答

OSS会在以下访问操作时进行防盗链验证:

  1. 当请求访问OSS中存储的资源时,OSS会检查HTTP或HTTPS头部中的Referer字段。
  2. 如果防盗链功能开启,并且配置了白名单或黑名单,OSS会依据配置规则判断Referer字段的值。
  3. 请求中如果Referer字段的值与配置的白名单不符,或者属于黑名单中的地址,OSS将拒绝访问并返回错误,如403 Forbidden。
  4. 当设置了不允许空Referer,且请求中没有Referer字段或其值为空时,OSS也会阻止访问。

综上,OSS在接收到任何带有或不带Referer字段的访问请求时,都会依据防盗链的配置规则进行验证,确保请求来源合法,防止未经授权的盗链行为导致的额外费用和资源滥用。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答