すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:他の Web サイトが OSS オブジェクトにリンクすることを防ぐために、Referer ホワイトリストまたはブラックリストを構成します。

最終更新日:Mar 22, 2025

他の Web サイトが Object Storage Service (OSS) 内のオブジェクトにリンクしたときに発生する予期しないストレージコストを防ぐために、指定したドメイン名を Referer ホワイトリストに含めて、これらのドメイン名からのみリンクを許可することができます。

前提条件

権限なしでオブジェクトにリンクする Referer を取得しています。 詳細については、「他の Web サイトからの OSS リソースリクエストで Referer を確認する」をご参照ください。

警告

Referer の構成ミスにより、Web サイトが OSS オブジェクトにリンクできなくなったり、ユーザーがブラウザから OSS オブジェクトに直接アクセスできなくなったりする可能性があります。 本番環境のバケットに Referer 構成を適用する前に、テスト環境のバケットに Referer 構成を適用してテストすることをお勧めします。

注意

デフォルトでは、Alibaba Cloud アカウントにはホットリンク保護を構成する権限があります。 RAM ユーザーとして、または Security Token Service (STS) を使用して構成するには、oss:PutBucketReferer 権限が必要です。 詳細については、「RAM ユーザーにカスタムポリシーをアタッチする」をご参照ください。

方法

OSS コンソールを使用する

たとえば、www.aliyun.com のみがバケット内のオブジェクトにリンクできるようにし、ユーザーがブラウザでオブジェクト URL を使用してバケット内のオブジェクトをリクエストできるようにするには、次の手順を実行します。

  1. OSS コンソール にログオンします。

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションツリーで、[コンテンツセキュリティ] > ホットリンク保護 を選択します。

  4. ホットリンク保護 ページで、ホットリンク保護 をオンにします。

    • [referer ホワイトリスト] フィールドに、次のコンテンツを入力します。

      OSS コンソールで複数の Referer を指定する場合は、改行で区切ります。

      https://www.aliyun.com
      http://www.aliyun.com

      Referer 構成の詳細については、「Referer 構成」をご参照ください。

    • [referer ブラックリスト] フィールドは空のままにします。

      重要

      Referer ホワイトリストとブラックリストの両方が存在する場合、OSS はまず Referer リクエストヘッダーをブラックリストと照合し、次にホワイトリストと照合します。 詳細については、「プロセス」をご参照ください。

    • [空の Referer を許可する] で、[はい] を選択します。

      • [はい]: Referer ヘッダーが空であるか、Referer ヘッダーが含まれていないリクエストを許可します。

      • [いいえ]: Referer ヘッダーが空であるか、Referer ヘッダーが含まれていないリクエストを拒否します。 [空の Referer を許可する] で [いいえ] を選択すると、ブラウザのアドレスバーにオブジェクト URL を入力してバケット内のオブジェクトにアクセスすることはできません。

    • 切り捨て QueryString を許可 で、[はい] を選択します。

      • [はい]: Referer 内のクエリ文字列が削除されます。 たとえば、Referer が http://www.example.com/?action=nop に設定されている場合、クエリ文字列が削除され、http://www.example.com/ が Referer の照合に使用されます。

      • [いいえ]: Referer 内のクエリ文字列は削除されません。 たとえば、Referer が http://www.example.com/?action=nop に設定されている場合、http://www.example.com/?action=nop が Referer の照合に使用されます。 クエリ文字列の解析ルールの詳細については、「クエリ文字列の解析ルール」をご参照ください。

  5. [保存] をクリックします。

OSS SDK を使用する

たとえば、www.alibabacloud.com のみがバケット内のオブジェクトにリンクできるようにし、ユーザーがブラウザでオブジェクト URL を使用してバケット内のオブジェクトをリクエストできるようにするとします。 次のサンプルコードは、OSS SDK を使用してこの目的のためにホットリンク保護を構成する方法の例を示しています。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.BucketReferer;
import java.util.ArrayList;
import java.util.List;

public class Demo {

    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されています。 実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // ソースバケットの名前を指定します。 例: examplebucket。
        String bucketName = "examplebucket";
        // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            List<String> refererList = new ArrayList<String>();
            // Referer ホワイトリストに Referer を追加します。 Referer では、アスタリスク (*) と疑問符 (?) をワイルドカードとして使用できます。
            refererList.add("http://www.aliyun.com");
            refererList.add("https://www.aliyun.com");
            // refererList.add("http://www.help.alibabacloud.com");
            // refererList.add("http://www.?.aliyuncs.com");
            // バケットの Referer ホワイトリストを構成します。 true を指定すると、Referer フィールドが空のリクエストが許可されます。 false を指定すると、Referer フィールドが空のリクエストは許可されません。
            BucketReferer br = new BucketReferer(true, refererList);
            ossClient.setBucketReferer(bucketName, br);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\OssClient;
use OSS\Core\OssException;
use OSS\Model\RefererConfig;

// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
$accessKeyId = getenv("OSS_ACCESS_KEY_ID"); 
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// この例では、中国 (杭州) リージョンのエンドポイントが使用されています。 実際のエンドポイントを指定してください。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
$bucket= "examplebucket";

$refererConfig = new RefererConfig();
// 空の Referer を許可します。
$refererConfig->setAllowEmptyReferer(true);
// Referer ホワイトリストを指定します。 Referer では、アスタリスク (*) と疑問符 (?) をワイルドカードとして使用できます。
$refererConfig->addReferer("http://wwww.aliyun.com");
$refererConfig->addReferer("https://wwww.aliyun.com");
// $refererConfig->addReferer("http://wwww.help.alibabacloud.com");
// $refererConfig->addReferer("http://www.?.aliyuncs.com");
try{
    $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

    $ossClient->putBucketReferer($bucket, $refererConfig);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . ": OK" . "\n");
const OSS = require('ali-oss')

const client = new OSS({
  // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
  region: 'yourregion',
  // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // バケットの名前を指定します。
  bucket: 'examplebucket'
});

async function putBucketReferer () {
  try {
  const result = await client.putBucketReferer(bucket, true, [
  'http://www.aliyun.com',
  'https://www.aliyun.com'
  ]);
  console.log(result);
  } catch (e) {
    console.log(e);
  }
 }

putBucketReferer();
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import BucketReferer

# 環境変数からアクセス認証情報を取得します。 コードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントにマップするリージョンの ID を指定します。 例: cn-hangzhou。 このパラメーターは、署名アルゴリズム V4 を使用する場合は必須です。
region = "cn-hangzhou"

# バケットの名前を指定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# 空の Referer フィールドを許可するように指定します。
allow_empty_referer = True 
# Referer ホワイトリストを指定します。
referers = ['http://www.aliyun.com', 'https://www.aliyun.com']
# Referer ブラックリストを指定します。
# black_referers = ['http://example.com', 'http://*.example.com']
# クエリ文字列を切り捨てることができるように指定します。
allow_truncate_query_string = True
# ホットリンク保護を構成します。
bucket.put_bucket_referer(BucketReferer(allow_empty_referer=allow_empty_referer, referers=referers, black_referers=black_referers,allow_truncate_query_string=allow_truncate_query_string))
using Aliyun.OSS;
using Aliyun.OSS.Common;
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。
var bucketName = "examplebucket";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";

// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトのパラメーターを変更します。
var conf = new ClientConfiguration();

// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;

// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    var refererList = new List<string>();
    // リファラー ホワイトリストを追加します。リファラーでは、ワイルドカードとしてアスタリスク (*) と疑問符 (?) を使用できます。
    refererList.Add("http://www.aliyun.com");
    refererList.Add("https://www.aliyun.com");
    // refererList.Add("http://www.help.alibabacloud.com");
    // refererList.Add("http://www.?.aliyuncs.com");
    var srq = new SetBucketRefererRequest(bucketName, refererList);
    // ホットリンク保護を設定します。
    client.SetBucketReferer(srq);
    Console.WriteLine("Set bucket:{0} Referer succeeded ", bucketName);
}
catch (OssException ex)
{
    Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
    Console.WriteLine("Failed with error info: {0}", ex.Message);
}
PutBucketRefererRequest request = new PutBucketRefererRequest();
request.setBucketName("examplebucket");
// リファラー ホワイトリストを指定します。リファラーでは、アスタリスク (*) および疑問符 (?) をワイルドカード文字として使用できます。
ArrayList<String> referers = new ArrayList<String>();
referers.add("http://www.aliyun.com");
referers.add("https://www.aliyun.com");
// referers.add("http://www.help.alibabacloud.com");
// referers.add("http://www.?.aliyuncs.com");
request.setReferers(referers);

OSSAsyncTask task = oss.asyncPutBucketReferer(request, new OSSCompletedCallback<PutBucketRefererRequest, PutBucketRefererResult>() {
    @Override
    public void onSuccess(PutBucketRefererRequest request, PutBucketRefererResult result) {
        OSSLog.logInfo("code: " + result.getStatusCode());
    }
    @Override
    public void onFailure(PutBucketRefererRequest request, ClientException clientException, ServiceException serviceException) {
        OSSLog.logError("error: "+serviceException.getRawMessage());
    }
});
task.waitUntilFinished();
package main

import (
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// バケット名を指定します。
	bucketName := "examplebucket"

	// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Error creating credentials provider: %v", err)
	}

	// OSSClient インスタンスを作成します。
        // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のエンドポイントを指定してください。
	// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。実際のリージョンを指定してください。
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// 署名アルゴリズムのバージョンを指定します。
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Error creating OSS client: %v", err)
	}

	var setBucketReferer oss.RefererXML
	// リファラーホワイトリストにリファラーを追加し、空のリファラーフィールドを許可しないことを指定します。アスタリスク (*) または疑問符 (?) をワイルドカードとして使用して、リファラーパラメーターを設定できます。
	setBucketReferer.RefererList = []string{
		"http://www.aliyun.com",
		"https://www.aliyun.com",
		"https://www.help.aliyun.com",
		"http://www.?.aliyuncs.com",
	}
	// リファラーブラックリストを追加します。OSS SDK for Go V2.2.8 以降では、リファラーブラックリスト設定がサポートされています。
	setBucketReferer.RefererBlacklist = &oss.RefererBlacklist{
		Referer: []string{
			"http://www.refuse.com",
			"https://*.hack.com",
			"http://ban.*.com",
			"https://www.?.deny.com",
		},
	}
	setBucketReferer.AllowEmptyReferer = true
	boolFalse := false
	setBucketReferer.AllowTruncateQueryString = &boolFalse

	err = client.SetBucketRefererV2(bucketName, setBucketReferer)
	if err != nil {
		log.Fatalf("Error setting bucket referer: %v", err)
	}

	log.Println("Set Bucket Referer Success") // バケットリファラーの設定に成功しました
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* OSS にアクセスするために使用するアカウントに関する情報を初期化します。 */
    
    /* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 */
    std::string Region = "yourRegion";
    /* バケットの名前を指定します。例: examplebucket。 */
    std::string BucketName = "examplebucket";

    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* ホットリンク保護を設定します。 */
    SetBucketRefererRequest request(BucketName);
    request.addReferer("http://www.aliyun.com");
    request.addReferer("https://www.aliyun.com");
    /* request.addReferer("https://help.alibabacloud.com");*/
    /* request.addReferer("http://www.?.aliyuncs.com");*/
    request.setAllowEmptyReferer(true);

    auto outcome = client.SetBucketReferer(request);

    if (!outcome.isSuccess()) {
        /* 例外を処理します。 */
        std::cout << "SetBucketReferer fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    return 0;
}
#include "oss_api.h"
#include "aos_http_io.h"
/* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
const char *endpoint = "yourEndpoint";
/* バケットの名前を指定します。例:examplebucket。 */
const char *bucket_name = "examplebucket";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* char* 文字列を使用して aos_string_t を初期化します。 */
    aos_str_set(&options->config->endpoint, endpoint);
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。 */
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // 2 つの追加パラメーターを指定します。
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* CNAME を使用するかどうかを指定します。値 0 は、CNAME が使用されていないことを示します。 */
    options->config->is_cname = 0;
    /* タイムアウト期間などのネットワークパラメーターを構成します。 */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* main() で aos_http_io_initialize メソッドを呼び出して、ネットワークリソースやメモリリソースなどのグローバルリソースを初期化します。 */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* メモリを管理するためのメモリプールを作成します。 aos_pool_t は apr_pool_t と同等です。メモリプールを作成するために使用されるコードは、APR ライブラリに含まれています。 */
    aos_pool_t *pool;
    /* メモリプールを作成します。2 番目のパラメーターの値は NULL です。この値は、プールが他のメモリプールを継承しないことを指定します。 */
    aos_pool_create(&pool, NULL);
    /* オプションを作成して初期化します。このパラメーターは、エンドポイント、access_key_id、access_key_secret、is_cname、curl などのグローバル構成情報を指定します。 */
    oss_request_options_t *oss_client_options;
    /* メモリプール内のメモリリソースをオプションに割り当てます。 */
    oss_client_options = oss_request_options_create(pool);
    /* oss_client_options を初期化します。 */
    init_options(oss_client_options);
    /* パラメーターを初期化します。 */
    aos_string_t bucket;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL;
    oss_referer_config_t referer_config;
    aos_str_set(&bucket, bucket_name);
    aos_list_init(&referer_config.referer_list);
    oss_create_and_add_refer(pool, &referer_config, "http://www.aliyun.com");
    oss_create_and_add_refer(pool, &referer_config, "https://www.aliyun.com");
    referer_config.allow_empty_referer = 1;
    /* リファラーをリファラーホワイトリストに追加します。リファラーでは、アスタリスク (*) と疑問符 (?) をワイルドカード文字として使用できます。 */
    resp_status = oss_put_bucket_referer(oss_client_options, &bucket, &referer_config, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("put bucket referer succeeded\n");
    } else {
        printf("put bucket referer failed\n");      
    }
    /* メモリプールを解放して、リクエストに割り当てられたメモリリソースを解放します。 */
    aos_pool_destroy(pool);
    /* 割り当てられたグローバルリソースを解放します。 */
    aos_http_io_deinitialize();
    return 0;
}
require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# バケットの名前を指定します。例: examplebucket。
bucket = client.get_bucket('examplebucket')
# バケットの Referer ホワイトリストを設定します。
bucket.referer = Aliyun::OSS::BucketReferer.new(
  allow_empty: true, whitelist: ['http://www.aliyun.com', 'https:www.aliyun.com'])

OSS SDK を使用して複数の Referer を指定する場合は、カンマ (,) で区切ります。

他のプログラミング言語の OSS SDK を使用してバケットのホットリンク保護を構成する方法の詳細については、「概要」をご参照ください。

ossutil を使用する

ossutil を使用して、Referer ホワイトリストまたはブラックリストを構成し、ホットリンク保護を有効にすることができます。 インストールの詳細については、「ossutil のインストール」をご参照ください。

たとえば、www.aliyun.com のみがバケット内のオブジェクトにリンクできるようにし、ユーザーがブラウザでオブジェクト URL を使用してバケット内のオブジェクトをリクエストできるようにするとします。

ossutil api put-bucket-referer --bucket xuelitest  --referer-configuration "{\"AllowEmptyReferer\":\"true\",\"RefererList\":{\"Referer\":[\"http://www.aliyun.com\",\"https://www.aliyun.com\"]}}"

このコマンドの詳細については、「put-bucket-referer」をご参照ください。

Referer 構成

Referer ホワイトリストまたはブラックリストを構成する場合は、次の点に注意してください。

項目

説明

URL のスキーム部分は無視されません。

たとえば、Referer 構成に http://www.aliyun.com レコードを含めると、このレコードは http://www.aliyun.com 部分を含む URL (http://www.aliyun.com/123http://www.aliyun.com.cn など) と一致します。 ただし、https://www.aliyun.com/123https://www.aliyun.com.cnwww.aliyun.com は、このレコードとは一致しません。

Referer レコードでは、アスタリスク (*) を使用して 0 文字以上の文字を表すことができます。

  • Referer ホワイトリストまたはブラックリストを * に設定すると、すべてのドメイン名と IP アドレスが照合されます。

  • Referer 構成に *www.example.com レコードを含めると、このレコードは www.example.com 文字列を含む URL (http://www.example.comhttps://www.example.comwww.example.com など) と一致します。

  • Referer 構成に *.example.com レコードを含めると、このレコードは http://help.example.comhttps://help.example.comhttp://www.example.comhttps://www.example.com と一致します。

Referer レコードでは、疑問符 (?) を使用して 1 文字を表すことができます。

Referer 構成に http://www.aliyun?.com レコードを含めると、このレコードは http://www.aliyunc.com と一致します。

Referer 構成は、ポート番号付きのドメイン名と IP アドレスをサポートしています。

たとえば、Referer 構成には、http://www.example.com:808010.10.10.10:8080 などのレコードを含めることができます。

クエリ文字列の解析ルール

クエリ文字列の切り捨てを無効にすると、OSS は次のルールに基づいてリクエスト内のクエリ文字列を処理します。

ルール

説明

クエリ文字列はデコードされません。

リクエスト URL が http://www.example.com/?job_id=task$01 で、Referer ホワイトリストまたは Referer ブラックリストに http://www.example.com/?job_id=task%2401 が含まれている場合、リクエスト URL は Referer ホワイトリストまたは Referer ブラックリストの Referer と一致しません。

クエリ文字列に含まれるフィールドは大文字と小文字が区別されません。

リクエスト URL が http://www.examplecom/?ACTION=NOP で、Referer ホワイトリストまたは Referer ブラックリストに http://www.example.com/?action=nop が含まれている場合、リクエスト URL は Referer ホワイトリストまたは Referer ブラックリストの Referer と一致します。

クエリ文字列に含まれるフィールドは解析されません。

リクエスト URL が http://example.com/?b=c&a=b で、Referer ホワイトリストまたは Referer ブラックリストに http://example.com/?a=b&b=c が含まれている場合、リクエスト URL は Referer ホワイトリストまたは Referer ブラックリストの Referer と一致しません。

関連 API 操作

上記で説明した方法は、基本的に RESTful API に基づいて実装されており、ビジネスで高度なカスタマイズが必要な場合は、API を直接呼び出すことができます。 API を直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketReferer」をご参照ください。

次のステップ

ホットリンク保護構成が有効になっているかどうかを確認する

参考文献

ホットリンク保護の例