All Products
Search
Document Center

Object Storage Service:Perlindungan hotlink (Go SDK V2)

Last Updated:Nov 09, 2025

Anda dapat menggunakan Alibaba Cloud OSS Go SDK untuk mengonfigurasi aturan akses berdasarkan header permintaan Referer. Aturan ini memungkinkan Anda menetapkan daftar putih Referer, daftar hitam Referer, serta menentukan apakah akan mengizinkan permintaan dengan header Referer kosong. Konfigurasi ini membantu Anda memblokir akses dari header Referer tertentu, mencegah situs web lain melakukan hotlinking pada sumber daya Anda, dan menghindari peningkatan biaya lalu lintas yang tidak perlu.

Perhatian

  • Sebelum mengonfigurasi perlindungan hotlink, pastikan Anda memahami fitur ini. Untuk informasi lebih lanjut, lihat Perlindungan hotlink.

  • Kode contoh dalam topik ini menggunakan Wilayah China (Hangzhou) (cn-hangzhou) dan Titik akhir publik secara default. Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan Titik akhir internal. Untuk informasi lebih lanjut tentang pemetaan antara wilayah OSS dan titik akhir, lihat Wilayah dan titik akhir OSS.

  • Kode contoh dalam topik ini menunjukkan cara mendapatkan kredensial akses dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan kredensial akses.

  • Untuk menetapkan atau menghapus perlindungan hotlink, Anda harus memiliki izin oss:PutBucketReferer. Untuk mengambil konfigurasi perlindungan hotlink, Anda harus memiliki izin oss:GetBucketReferer. Untuk informasi lebih lanjut, lihat Berikan izin kustom kepada Pengguna RAM.

Kode contoh

Tetapkan perlindungan hotlink

Gunakan kode berikut untuk menetapkan perlindungan hotlink.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah.
	bucketName string // Nama bucket.
)

// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket kosong.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah kosong.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan tetapkan penyedia kredensial serta wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk menetapkan perlindungan hotlink untuk bucket.
	request := &oss.PutBucketRefererRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
		RefererConfiguration: &oss.RefererConfiguration{
			AllowEmptyReferer: oss.Ptr(true),
			RefererList: &oss.RefererList{
				Referers: []string{
					"http://www.aliyun.com",
					"https://www.aliyun.com",
					"https://www.www.alibabacloud.com/help",
					"http://www.?.aliyuncs.com",
				},
			}, // Tambahkan Referer ke daftar putih Referer. Parameter Referer mendukung karakter wildcard asterisk (*) dan tanda tanya (?).
			RefererBlacklist: &oss.RefererBlacklist{
				Referers: []string{
					"http://www.refuse.com",
					"https://*.hack.com",
					"http://ban.*.com",
					"https://www.?.deny.com",
				},
			}, // Tambahkan Referer ke daftar hitam Referer.
		},
	}

	// Eksekusi permintaan untuk menetapkan perlindungan hotlink untuk bucket.
	result, err := client.PutBucketReferer(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal menetapkan referer bucket %v", err)
	}

	// Cetak hasil penyetelan perlindungan hotlink untuk bucket.
	log.Printf("hasil referer bucket:%#v\n", result)
}

Dapatkan pengaturan perlindungan hotlink

Gunakan kode berikut untuk mengambil konfigurasi perlindungan hotlink.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah.
	bucketName string // Nama bucket.
)

// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket kosong.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah kosong.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan tetapkan penyedia kredensial serta wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk mendapatkan konfigurasi Referer bucket.
	request := &oss.GetBucketRefererRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
	}

	// Eksekusi operasi untuk mendapatkan konfigurasi Referer bucket dan proses hasilnya.
	result, err := client.GetBucketReferer(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mendapatkan referer bucket %v", err)
	}

	// Cetak hasil mendapatkan konfigurasi Referer bucket.
	log.Printf("hasil referer bucket:%#v\n", result.RefererConfiguration.RefererList.Referers)
}

Hapus konfigurasi perlindungan hotlink

Gunakan kode berikut untuk menghapus konfigurasi perlindungan hotlink.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah.
	bucketName string // Nama bucket.
)

// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket kosong.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah kosong.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan tetapkan penyedia kredensial serta wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk menetapkan perlindungan hotlink untuk bucket.
	request := &oss.PutBucketRefererRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
		RefererConfiguration: &oss.RefererConfiguration{
			AllowEmptyReferer: oss.Ptr(true),
			RefererList: &oss.RefererList{
				Referers: []string{}, // Daftar Referer kosong.
			},
		},
	}

	// Eksekusi permintaan untuk menetapkan perlindungan hotlink untuk bucket.
	result, err := client.PutBucketReferer(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal menetapkan referer bucket %v", err)
	}

	// Cetak hasil penyetelan perlindungan hotlink untuk bucket.
	log.Printf("hasil referer bucket:%#v\n", result)
}

Referensi

  • Untuk informasi lebih lanjut tentang operasi API untuk menetapkan perlindungan hotlink, lihat PutBucketReferer.

  • Untuk informasi lebih lanjut tentang operasi API untuk mengambil konfigurasi perlindungan hotlink, lihat GetBucketReferer.