概要

このドキュメントでは、ホットリンク保護の設定方法、およびホットリンク保護エラーをトラブルシューティングする方法について説明します。

 

フィールドの説明と設定

Referer とは何ですか

Referer は HTTP ヘッダーのフィールドです。リクエストされているリソースにリンクしている Web ページのアドレスを識別します。

 

Referer の機能

  • ホットリンク保護。たとえば、Web サイトが独自のイメージサーバーにアクセスすると、イメージサーバーはリクエストされたドメイン名が許可されるかどうかを判断するため、Referer を取得します。ドメイン名が許可されない場合、 リクエストは拒否されます。
  • 統計コレクション。たとえば、リクエストされたリソースにリンクしている Web ページのアドレスに関する統計を収集できます。

 

空の Referer を許可

  • 空の Referer は、HTTP リクエスト内で Referer フィールドが指定されていないか、HTTP リクエストに Referer ヘッダーが含まれていないことを意味します。Referer フィールドは、次の条件のいずれかで空と見なされます。
    • リンクをクリックしてもリソースにアクセスしない。Web ページにアクセスするには、アドレスバーにアドレスを入力します。
    • HTTPS Web ページのリンクをクリックして HTTP Web ページにアクセスすると、HTTP Web サイトのエージェントが Referer フィールドを取得できない。
  • ホットリンク保護を設定する場合、空の Referer フィールドを許可するかどうかの違いは次のとおりです。
    • Referer ホワイトリストを設定する際に、[空の Referer を許可する] をオンにすると、アドレスバーにアドレスを入力することで、ブラウザーからリソース URL にアクセスできます。
    • [空の Referer を許可する] をオフにすると、ブラウザーからリソース URL にアクセスできなくなります。

 

ホットリンク保護

OSS は Referer を使用してホットリンク保護を実装します。したがって、ホットリンク保護は、Refer または refer と略されます。

 

ホットリンク保護の設定

注意: Referer の設定方法の詳細については、「ホットリンク保護の設定」をご参照ください。

OSS では、ホットリンク保護で説明されているように、コンソールの使用、または SDK を呼び出すことにより、バケットにホットリンク保護を設定できます。

  • ホットリンク保護を設定するには、次のパラメーターを設定します。
    • 空の Referer を許可する
    • リファラーホワイトリスト
  • ホットリンク保護を設定する場合、次のことに注意してください。
    • ホットリンク保護ベースの検証は、オブジェクトに匿名でアクセスする場合、または署名付き URL を使用する場合にのみ必要です。リクエストのヘッダーに Authorization フィールドが含まれている場合、ホットリンク保護ベースの検証は必要ありません。
    • OSS では、複数のドメイン名をリファラーホワイトリストに追加できます。これらのドメイン名はコンマ (,) で区切られます。
    • Referer フィールドの値には、ワイルドカードとしてアスタリスク () と疑問符 (?) を含めることができます。
    • 空の Referer フィールドを含んでいるリクエストを許可するかどうかを設定できます。
    • リファラーホワイトリストが空の場合、Referer フィールドがリクエストで空かどうかに関係なく、すべてのリクエストが許可されます。
    • リファラーホワイトリストが指定され、[空の Referer を許可する] がオフになっている場合、リファラーホワイトリストに追加されたドメイン名を含むリクエストのみが許可されます。空の Referer フィールドを含むリクエストを含め、その他のリクエストはすべて拒否されます。
    • リファラーホワイトリストが指定され、[空の Referer を許可する] がオンになっている場合、OSS は Referer フィールドが空のリクエストと Referer フィールドがリファラーホワイトリストに含まれているリクエストを許可し、他のすべてのリクエストを拒否します。
    • バケットの ACL が非公開、公開読み取り、または公開読み書きの場合、ホットリンク保護ベースの検証が必要です。
  • ワイルドカード
    • アスタリスク ():ゼロまたは複数の文字を置き換えるために使用されます。名前が AEW で始まり、残りの部分を忘れてしまったオブジェクトを探したい場合、AEW と入力すると、AEWT.txtAEWU.EXE 、または AEWI.dll のように名前が AEW で始まるすべてのオブジェクトを検索できます。検索範囲を絞り込むには、 AEW.txt と入力すると、 AEWIP.txtAEWDF.txt など、AEW で始まる名前を持つすべての .txt オブジェクトを検索できます。
    • 疑問符 (?):1 文字を置き換えるために使用されます。たとえば、 love? と入力すると、loveylovei のように、名前が love で始まり、次の 1 文字で終わるすべてのオブジェクトを検索できます。検索範囲を絞り込むには、love?.doc と入力すると、lovey.docloveh.doc のように名前が loveで始まり、 次の 1 文字で終わるすべての .doc オブジェクトを検索できます。
  • 代表的な設定項目は次のとおりです。
    • すべてのリクエストをバケットにアクセスさせる場合

      • 空の Referer を許可する:この機能をオンにすると、空の Referer フィールドを含むリクエストを許可します。
      • リファラーホワイトリスト:空のままにします。
    • Referer フィールドが指定されたリクエスト、または Referer フィールドのないリクエストを、バケットにアクセスさせる場合

 

一般的なエラーとトラブルシューティング

エラー1:バケットにホットリンク保護を設定した後、curl コマンドを実行して、オブジェクトからビデオオブジェクトを取得できる。

原因分析

考えられる原因は、CDN で Referer フィールドを設定せずに CDN が有効になっている。

 

解決策
  1. CDN が有効になっているかどうかを確認します。 CDN の Referer フィールドを指定する必要があります。リファラーホワイトリストは、OSS のホワイトリストと同じでなければなりません。
  2. OSS の Referer をデバッグする前に、CDN による影響を排除してください。 OSS の Referer をデバッグしてから、CDN の Referer をデバッグします。

 

エラー 2:Referer フィールドが正しく設定されていない場合、HTTP ステータスコード 403 が表示され、OSS で「バケットリファラーポリシーにより拒否されています。」と指示される。

原因分析

考えられる原因は次のとおりです。

  • Referer フィールドが空になっている。Referer フィールドがリクエストに含まれていないか、Referer フィールドが指定されていない。
  • Referer フィールドの値が指定された範囲内にないか、形式が無効になっている。

 

解決策

デバッグを実行する前に、ブラウザーのキャッシュをクリアすることを推奨します。エラーが続く場合は、次の手順を実行して問題を解決してください。

  • Referer フィールドが空の場合、 OSS コンソールにログインします。バケットを選択し、[基本設定] タブをクリックします。[アンチホットリンク] セクションで、Referer を設定します。OSS の Referer では、ブラックリストではなくホワイトリストのみがサポートされていることにご注意ください。
  • Referer フィールドの値が指定された範囲内にない場合、または形式が無効な場合は、 http:// または https:// が設定されているかどうか、 リクエストのドメイン名が設定された Referer と一致するかどうかを確認してください。たとえば、 a.aliyun.comb.aliyun.com は、 http://*.aliyun.com または http://?.aliyun.com と一致します。domain.com は、 http://*.domain.com ではなく、http://domain.com と一致します。
  • リファラー関連のエラーは、Web サイトで OSS を使用し、Referer の設定が適切でない場合に発生します。ブラウザーで、ヘッダーに含まれる Referer フィールドを表示できます。Google Chrome を使用している場合は、 F12 キーを押して 開発者ツールにアクセスします。[ネットワーク] タブで、対応する要素のヘッダー情報を表示できます。
  • OSS が返すエラーは、パケットをキャプチャすることで取得できます。たとえば、Wireshark を使用して、 host bucket-name.oss-cn-beijing.aliyuncs.com をパケットをキャプチャするフィルターとして指定できます。

 

参照資料

その他のエラーのトラブルシューティング方法の詳細については、 「OSS 403」をご参照ください。

適用範囲

  • OSS