Object Storage Service (OSS) では、リファラーベースのフィルタリングポリシーを設定して、特定のリファラーを含むリクエストがバケット内のデータにアクセスするのをブロックできます。 これにより、不正アクセスや予期しないトラフィック料金を防ぐことができます。
シナリオ
不正アクセスのブロック: ホットリンク保護を使用すると、特定のWebサイトが許可なしに画像、オーディオデータ、ビデオデータ、または著作権で保護されたコンテンツにアクセスまたはダウンロードするのをブロックできます。
帯域幅とリソース使用量の削減: ホットリンク保護により、他のWebサイトがリソースにリンクできなくなり、サーバーの帯域幅使用量と負荷が削減されます。
有料コンテンツの保護: 有料コンテンツのシナリオでは、ホットリンク保護により、コンテンツ購入者のみが有料コンテンツにアクセスして使用し、不正なコンテンツの配布や著作権侵害を防ぐことができます。
パートナーとのデータ共有: ホットリンク保護では、特定のパートナーのみがリソースにアクセスして使用できます。
条件
ホットリンク: 別のWebサイトでホストされているコンテンツをWebサイトが直接リンクし、権限なしでコンテンツを表示する行為。
ホットリンク保護: リファラーベースのフィルタリングポリシーを設定することにより、不正なWebサイトまたはユーザーからのアクセスを防止する行為。
Referer: リクエストの送信元のURLを含むHTTPリクエストヘッダー。 リファラーヘッダーの2つの一般的な使用シナリオは、ホットリンク保護とデータ監視です。 ホットリンク保護: たとえば、Refererヘッダーをチェックして、リクエストがドメイン名に由来するかどうかを判断できます。 リクエストがドメイン名から発信された場合、リクエストは許可されます。 そうでなければ、要求は拒否される。 データ監視: たとえば、Refererヘッダーをチェックして、リクエストの送信元のURLを監視できます。
Empty Referer: HTTPリクエストに空のRefererヘッダーまたはRefererヘッダーがありません。 Refererヘッダーは、次のいずれかの状況で空になります。リクエストがHTTPSページからのHTTPリクエストであるか、リクエストがリンクからトリガーされないかです。 たとえば、リソースを要求するためにブラウザのアドレスバーにURLを入力しても、リファラーデータは渡されません。
ホワイトリスト: リクエストが許可されるリファラーのリスト。 ホワイトリストを設定して、バケット内のリソースへのアクセスを許可するリファラーを指定できます。
ブラックリスト: リクエストが拒否されるリファラーのリスト。 ブラックリストを設定して、バケット内のリソースへのアクセスをブロックするリファラーを指定できます。
クエリ文字列: リクエストパラメーターを含むURLの部分。 クエリ文字列は、URLの疑問符 (?) に続く部分であり、キーと値のペアの形式です。
制御ポリシー機能の動作
ブラウザがバケット内のオブジェクトにアクセスするリクエストを送信すると、リクエストの送信元を指定するRefererヘッダーがリクエストに含まれます。 バケットにホットリンク保護が設定されている場合、OSSはリクエスト内のRefererをバケットのReferer設定と比較します。
リクエストのRefererがRefererブラックリストに含まれているか、Refererホワイトリストに含まれていない場合、リクエストは拒否されます。
リクエストのリファラーがリファラーホワイトリストに含まれている場合、リクエストは許可されます。
たとえば、https:// 10.10.10.10
はバケットのリファラーホワイトリストに含まれ、test.jpgイメージはバケットに保存されます。
ユーザーAは、test.jpg画像を
https:// 10.10.10.10
Webサイトにリンクします。 Webサイトから画像が要求されると、ブラウザはRefererヘッダーの値がhttps:// 10.10.10.10
である要求を送信します。 リクエストのリファラーヘッダーの値がリファラーホワイトリストに含まれているため、OSSはリクエストを許可します。ユーザーBは、test.jpgイメージを
https:// 192.168.0.0
Webサイトにリンクします。 Webサイトから画像が要求されると、ブラウザはRefererヘッダーの値がhttps:// 192.168.0.0
である要求を送信します。 リクエストのリファラーヘッダーの値がリファラーホワイトリストに含まれていないため、OSSはリクエストを拒否します。
プロセス
ホットリンク保護を有効にすると、OSSはリクエストのリファラーヘッダーの値に基づいてリクエストの送信元を決定し、リクエストを許可するかどうかを決定します。 プロセスの詳細を次の図に示します。
リファラーが空かどうかを確認します。
リファラーが空の場合は、空のリファラーが許可されているかどうかを確認します。
空のリファラーが許可されている場合、リクエストは許可されます。
空のリファラーが許可されず、リファラーホワイトリストが空の場合、リクエストは許可されます。
空のリファラーが許可されず、リファラーホワイトリストが空でない場合、リクエストは拒否されます。
リファラーが空でない場合は、手順2を実行します。
リファラーブラックリストが空かどうかを確認します。
リファラーブラックリストを通過します。
リファラーがリファラーブラックリストに含まれている場合、リクエストは拒否されます。
リファラーがリファラーブラックリストに含まれていない場合は、手順4を実行します。
リファラーホワイトリストをトラバースします。
リファラーがリファラーホワイトリストに含まれている場合、リクエストは許可されます。
リファラーがリファラーホワイトリストに含まれていない場合、リクエストは拒否されます。
使用上の注意
OSSはバケットレベルのホットリンク保護のみをサポートしています。 バケット内のオブジェクトまたはディレクトリにホットリンク保護を設定することはできません。
URLベースのアクセス (GetObject) と匿名アクセスのみが、ホットリンク保護設定に基づいて検証されます。
権限付与
ヘッダーを含むリクエストは、ホットリンク保護設定に基づいて検証されません。バケットのリファラーホワイトリストとリファラーブラックリストに複数のリファラーを追加できます。 リファラーはコンマ (
,
) で区切ります。OSSは、バケットのアクセス制御リスト (ACL) に関係なく、ホットリンク保護が設定されているバケットへのアクセスを許可する前に、リクエスト内のRefererヘッダーをチェックします。
bucketname.oss-cn-hangzhou.aliyuncs.com
などのバケットのドメイン名を使用してMP4オブジェクトをプレビューすると、ブラウザは2つのリクエストを送信します。 1つはRefererを含み、もう1つは空のRefererを含みます。 この場合、バケットのホットリンク保護を設定するときに、バケットドメイン名をリファラーホワイトリストに追加し、空のリファラーを許可する必要があります。bucketname.oss-cn-zhangjiakou.aliyuncs.com
などのバケットドメイン名を使用してnon-MP4オブジェクトをプレビューする場合は、[空のリファラーを許可] を [はい] に設定するだけです。