OSS 上のユーザーデータが盗難されるのを防ぐために、OSS は、 HTTP ヘッダー内の "referer" フィールド設定による Anti-leech 機能をサポートしています。設定には次のパラメーターが含まれます。

  • Referer whitelist: 指定されたドメインに対してのみ OSS データへのアクセスを許可するために使用されます。
  • Empty referer: リファラーを空にできるかどうかを決定します。 許可されていない場合は、HTTP ヘッダーまたは HTTPS ヘッダー内の "referer" フィールドによるリクエストのみが OSS データにアクセスできます。

Anti-leech 機能の詳細については、「Anti-leech 機能設定」をご参照ください。 Anti-leech の設定に関する完全なコードについては、『GitHub』をご参照ください。

リファラーホワイトリストの設定

次のコードを実行して、リファラーホワイトリストを設定します。

package main

import (
	"fmt"
	"os"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Create an OSSClient instance.
	client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
	if err ! = nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	bucketName := "<yourBucketName>"

	// Add the referer field. Empty referer is not allowed. The referer field allows question marks (?) and asterisks (*) for wildcard use.
	referers := []string{"http://www.aliyun.com",
                         "http://www.???.aliyuncs.com",
                         "http://www. *.com"}
	err = client.SetBucketReferer(bucketName, referers, false)
	if err ! = nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
}

リファラーホワイトリストの入手

次のコードを実行して、リファラーホワイトリストを取得します。

package main

import (
	"fmt"
	"os"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Create an OSSClient instance.
	client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
	if err ! = nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	bucketName := "<yourBucketName>"

	// Obtain the referer whitelist.
	refRes, err := client.GetBucketReferer(bucketName)
	if err ! = nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	fmt.Println("Referers: ", refRes.RefererList)
	fmt.Println("AllowEmptyReferer: ", refRes.AllowEmptyReferer)
}

リファラーホワイトリストの解除

次のコードを実行して、リファラーホワイトリストを解除します。

package main

import (
	"fmt"
	"os"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Create an OSSClient instance.
	client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
	if err ! = nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	bucketName := "<yourBucketName>"

	// Clear the referer whitelist. // You cannot clear a referer whitelist directly. To clear a referer whitelist, you need to create the rule that allows an empty referer field and replace the original rule with the new rule.
	err = client.SetBucketReferer(bucketName, []string{}, true)
	if err ! = nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
}