Object Storage Service (OSS) では、リファラーベースのフィルタリングポリシーを設定して、特定のリファラーを含むリクエストがバケット内のデータにアクセスするのをブロックできます。 これにより、不正アクセスや予期しないトラフィック料金を防ぐことができます。
シナリオ
不正アクセスのブロック: ホットリンク保護を使用すると、特定の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ヘッダーをチェックします。
バケットのドメイン名 (デフォルトまたはカスタムのいずれか) を使用して、ホットリンク保護が設定されているバケット内のMP4オブジェクトをプレビューする場合、バケットドメイン名をリファラーホワイトリストに追加し、空のリファラーを許可する必要があります。 これは、ブラウザが2つのリクエストを送信するためです。1つは実際のRefererを含み、もう1つは空のRefererを含みます。 MP4オブジェクトは、2つのリクエストが成功した場合にのみ再生できます。 バケットのドメイン名を使用してnon-MP4オブジェクトをプレビューする場合は、空のリファラーのみを許可する必要があります。