他のウェブサイトからのホットリンクによって Object Storage Service (OSS) のトラフィックコストが増加する場合、Referer ホワイトリストまたはブラックリストを設定してアクセスを制限します。
仕組み
ブラウザが OSS ファイルをリクエストすると、HTTP Referer ヘッダーがリクエスト元のページを示します。OSS はこの Referer の値を検証して、リクエストの送信元を確認します。
ホットリンク保護の設定後、OSS は次の順序でリクエストを評価します。
-
空の Referer のチェック:OSS は Referer が空かどうかを確認します。空の場合、次のロジックが適用されます。
-
空の Referer を許可する設定の場合、リクエストは許可されます。
-
空の Referer を許可せず、ホワイトリストが空の場合、リクエストは許可されます。
-
空の Referer を許可せず、ホワイトリストが空でない場合、リクエストは拒否されます。
Referer が空でない場合、次のステップに進みます。
-
-
ブラックリストのチェック:OSS は Referer がブラックリストのいずれかのエントリに一致するかを確認します。一致する場合は即座に拒否され、ホワイトリストは確認されません。一致しない場合は処理を続行します。
-
ホワイトリストのチェック:OSS は Referer がホワイトリストのいずれかのエントリに一致するかを確認します。一致する場合はリクエストを許可し、一致しない場合は拒否します。
操作手順
-
バケット リストに移動し、対象のバケットをクリックします。
-
左側のナビゲーションペインで、を選択します。ホットリンク保護 オプションを有効にし、必要に応じて Referer ルールを設定します:
-
[Referer ホワイトリスト]:リソースへのアクセスを許可するドメインです。1行に1つずつ入力します。
-
[Referer ブラックリスト]:アクセスを拒否するドメインです。1行に1つずつ入力します。ブラックリストはホワイトリストよりも優先されます。
-
[空の Referer を許可]:ブラウザからの直接アクセスなど、Referer ヘッダーを含まないリクエストを許可するかどうかを指定します。
-
[切り捨て QueryString を許可]:照合時に、URL 内の
?の後のクエリストリングを無視するかどうか。クエリストリングの解析ルール。
Referer ルールはワイルドカードをサポートしています。
ワイルドカード
説明
例
*0文字以上の任意の文字に一致します。
*.example.comはhttp://www.example.comおよびhttps://help.example.comに一致します。?任意の1文字に一致します。
http://www.aliyun?.comはhttp://www.aliyunc.comに一致します。リファラールールは、
http://www.example.com:8080や10.10.10.10:8080のように、ポートを含むドメインや IP アドレスにも対応しています。説明マッチングはプロトコルに依存します。
http://www.aliyun.comのルールはhttps://www.aliyun.comには一致しません。HTTP と HTTPS の両方のエントリを追加してください。 -
-
設定を適用するには、設定 をクリックします。
ユースケース
信頼できるウェブサイトのみからのアクセス許可
指定したウェブサイトのみに OSS リソースへのアクセスを許可し、ブラウザからの直接アクセスも許可します。
ステップ 1:Referer の取得
ルールを設定する前に、OSS リソースへのリクエストの Referer を特定します。
-
OSS リアルタイムログの使用:[バケット] リストに移動します。 ターゲットバケットのページで、 を選択して
refererフィールドを探します。 ハイフン (-) は、Referer が空のリクエストを示します。 -
ブラウザー開発者ツールの使用: F12 キーを押してブラウザー開発者ツールを開きます。[ネットワーク] パネルで、リクエストの
Refererヘッダーを確認します。
ステップ 2:Referer ルールの設定
|
パラメーター |
値 |
説明 |
|
[Referer ホワイトリスト] |
|
HTTP と HTTPS の両方について、信頼できるドメインを追加します。管理機能を維持するため、コンソールドメインも含めてください。 |
|
[Referer ブラックリスト] |
空のままにする |
ブロックする送信元はありません。 |
|
[空の Referer を許可] |
許可する |
ブラウザからの直接アクセスと、Referer を省略するクライアントからのアクセスを許可します。 |
|
[切り捨て QueryString を許可] |
許可する |
柔軟なマッチングのため、URL クエリ文字列を無視します。 |
ステップ 3:設定の検証
# ホワイトリストに登録された Referer からのリクエストをシミュレート (成功が期待される)
curl -e "http://www.aliyun.com" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
# ホワイトリストに登録されていない Referer からのリクエストをシミュレート (AccessDenied が返されることが期待される)
curl -e "http://www.example.com" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
# Referer が空のリクエストをシミュレート (成功が期待される)
curl http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
悪意のあるウェブサイトのブロック
ほとんどの送信元からのアクセスを許可しながら、ブラックリストを使用して特定の悪意のあるウェブサイトをブロックします。
ステップ 1:Referer の特定
[バケット] リストに移動します。対象のバケットのページで、 を選択します。異常なトラフィックレコードをフィルター処理し、referer フィールドを確認して、不正なドメインを特定します。
ステップ 2:Referer ルールの設定
|
パラメーター |
値 |
説明 |
|
[Referer ホワイトリスト] |
|
すべての送信元からのアクセスを許可します。 |
|
[Referer ブラックリスト] |
|
悪意のあるドメインを追加します。ワイルドカードを使用して、ドメイン全体とそのサブドメインをブロックします。 |
|
[空の Referer を許可] |
許可する |
直接アクセスと正当なクライアントの動作を許可します。 |
|
[切り捨て QueryString を許可] |
許可する |
柔軟なマッチングのため、URL クエリ文字列を無視します。 |
ステップ 3:設定の検証
# 通常のウェブサイトからのリクエストをシミュレート (成功が期待される)
curl -e "http://www.example.com" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
# ブラックリストに登録されたウェブサイトからのリクエストをシミュレート (AccessDenied が返されることが期待される)
curl -e "http://bad-site.example" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
# Referer が空のリクエストをシミュレート (成功が期待される)
curl http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
WeChat ミニプログラムアクセスの許可
WeChat ミニプログラムは、https://servicewechat.com/{appid}/{version}/page-frame.html という固定の Referer 形式を使用します。この形式に一致するようにルールを構成してください。
ステップ 1:Referer 形式の特定
WeChat ミニプログラムの Referer 形式は固定で予測可能であるため、ワイルドカードを使用して直接設定できます。 正確な形式を確認するには、[バケット] リストに移動し、対象バケットの セクションで referer フィールドを確認します。
ステップ 2:Referer ルールの設定
|
パラメーター |
値 |
説明 |
|
[Referer ホワイトリスト] |
|
ワイルドカードですべてのミニプログラムの AppID とバージョンをカバーします。管理機能を維持するため、コンソールドメインも含めてください。 |
|
[Referer ブラックリスト] |
空のままにする |
ブロックする送信元はありません。 |
|
[空の Referer を許可] |
許可する |
一部のミニプログラムは Referer を省略します。空の Referer を許可することで互換性を確保します。 |
|
[切り捨て QueryString を許可] |
許可する |
柔軟なマッチングのため、URL クエリ文字列を無視します。 |
ステップ 3:設定の検証
# WeChat ミニプログラムからのリクエストをシミュレート (成功が期待される)
curl -e "https://servicewechat.com/wx1234567890abcdef/1/page-frame.html" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 他の送信元からのリクエストをシミュレート (AccessDenied が返されることが期待される)
curl -e "http://www.example.com" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
# Referer が空のリクエストをシミュレート (成功が期待される)
curl http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
OSS コンソールアクセスの許可
ホットリンク保護を有効にした後、管理機能を維持するために OSS コンソールドメインをホワイトリストに追加します。
ステップ 1:ルールの設定
|
パラメーター |
値 |
説明 |
|
[Referer ホワイトリスト] |
|
ワイルドカードですべての OSS コンソールサブドメインをカバーし、リージョン全体でプレビューが機能するようにします。 |
|
[Referer ブラックリスト] |
空のままにする |
ブロックする送信元はありません。 |
|
[空の Referer を許可] |
許可する |
直接アクセスとコンソールプレビューの動作を許可します。 |
|
[切り捨て QueryString を許可] |
許可する |
柔軟なマッチングのため、URL クエリ文字列を無視します。 |
ステップ 2:設定の検証
# コンソールからのアクセスをシミュレート (成功が期待される)
curl -e "https://oss.console.alibabacloud.com" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
OSS コンソールからファイルをプレビューおよびダウンロードして検証することもできます。
URL による直接アクセスのブロック
空の Referer を許可しないことで、すべてのリクエストが指定されたウェブサイトから発信されるようにし、URL による直接アクセスを防止します。
これにより、ブックマークやメールリンクを含むすべての直接アクセスがブロックされます。一部のブラウザプラグイン、ダウンロードマネージャー、ビデオプレーヤーは Referer を省略することが多いため、動作しない可能性があります。
ステップ 1:Referer の決定
すべての正当なアクセスシナリオをカバーするため、ウェブサイトのすべてのドメインとプロトコルの組み合わせを特定します。
ステップ 2:ルールの設定
|
パラメーター |
値 |
説明 |
|
[Referer ホワイトリスト] |
|
ウェブサイトのドメインです。必要なすべてのドメインとプロトコルの組み合わせを追加してください。管理機能を維持するため、コンソールドメインも含めてください。 |
|
[Referer ブラックリスト] |
空のままにする |
ブロックする送信元はありません。 |
|
[空の Referer を許可] |
いいえ |
ブラウザのアドレスバーからの直接アクセスをブロックします。 |
|
[切り捨て QueryString を許可] |
許可する |
柔軟なマッチングのため、URL クエリ文字列を無視します。 |
ステップ 3:設定の検証
# ウェブサイトからのリクエストをシミュレート (成功が期待される)
curl -e "http://www.example.com" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 直接アクセスをシミュレート (AccessDenied が返されることが期待される)
curl http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 他のウェブサイトからのリクエストをシミュレート (AccessDenied が返されることが期待される)
curl -e "http://other.example" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
クエリ文字列の解析ルール
[クエリ文字列の切り捨て] オプションを無効にした場合、OSS は次のようにクエリ文字列を解析します。
|
ルール |
説明 |
|
クエリ文字列は URL デコードされません。 |
リクエスト URL が |
|
パラメーターでは大文字と小文字が区別されません。 |
リクエスト URL が |
|
パラメーターの順序は重要です。 |
リクエスト URL が |
本番環境での考慮事項
-
CDN キャッシュバイパスのリスク:ホットリンクリクエストが CDN エッジノードに到達し、キャッシュから提供されることで、OSS ホットリンク保護をバイパスする可能性があります。これを防ぐには、CDN でも 同じ Referer ホットリンク保護ルールを設定してください。
-
ブラウザの Referrer-Policy の影響:ブラウザは Referrer-Policy ヘッダーをサポートしており、これによりクロスオリジンリクエストで送信される Referer 情報の量が制御されます。
no-referrerなどのポリシーでは、ブラウザが Referer を省略するため、OSS はこれらを Referer が空のリクエストとして扱います。ルールを設定する際にはこの点を考慮してください。 -
ビデオ再生の互換性:ブラウザのネイティブ
videoタグは、Referer を含む初期リクエストと、空の Referer を含む後続のメディアデータリクエストを送信します。ビデオ再生が機能するようにするには、空の Referer を含むリクエストを許可する必要があります。
クォータと制限
-
匿名アクセスまたは署名付き URL。 AccessKey で署名された API コール (
Authorizationヘッダーを含むリクエスト) は、ホットリンク防止ルールによる制限を受けません。 -
リストサイズの制限:Referer ホワイトリストとブラックリストの合計サイズは 20 KB を超えることはできません。
-
適用範囲:ホットリンク保護はバケットレベルで適用されます。オブジェクトごと、またはディレクトリごとのルールはサポートされていません。
よくある質問
ホットリンク保護が機能しないのはなぜですか?
次の項目を順番に確認してください。
-
ブラウザ環境の確認:WeChat ミニプログラムや iframe など、特定の環境では Referer が変更される場合があります。OSS リアルタイムログまたはブラウザ開発者ツールを使用して実際の Referer を特定し、ルールを調整してください。
-
Referer のフォーマット:Referer エントリにプロトコルプレフィックス (
http://またはhttps://) が含まれていることを確認してください。省略すると、ルールは失敗します。 -
CDN キャッシュバイパス:CDN にホットリンク保護がない場合、リクエストが OSS 検証をバイパスする可能性があります。CDN で一致するホットリンク保護ルールを設定してください。
WeChat ミニプログラムでのアクセス拒否エラーの解決
WeChat ミニプログラムは、https://servicewechat.com/ で始まる固定のリファラーを使用します。ホワイトリストに *servicewechat.com を追加することで、すべてのミニプログラムからのアクセスが許可されます。
直接アクセスでのアクセス拒否エラーの解決
ブラウザからの直接アクセスでは、空のリファラーが送信されます。空のリファラーが許可されていない場合、アクセスは拒否されます。直接アクセスを許可するには、ホットリンク防止設定の空の Referer を許可オプションを許可するに変更します。
InlineDataTooLarge エラーの解決
Referer ホワイトリストとブラックリストの合計サイズが 20 KB の制限を超えています。ワイルドカードを使用してルールを統合するか、不要なエントリを削除してください。