ホットリンキングから画像を保護する方法

ホットリンキング(インラインリンク)は、サードパーティのサイトがあなたのサーバーから画像のURLを直接リンクして表示するときに発生します。その結果:彼らのサイトがあなたの帯域幅を消費し、転送クォータを消耗させ、サーバーに負荷をかけますが、あなたには何のメリットもありません。2026年、ホットリンキングは依然としてウェブ上で最も一般的な不正使用の一つです。効果的に保護するためのすべての方法をご紹介します。

ホットリンキングとその結果を理解する

サイトが自分のページで <img src="https://yourdomain.com/photo.jpg"> タグ経由で画像を埋め込むと、あなたのサーバーがそのページの各読み込みに応答します。具体的には:

  • あなたの帯域幅がサードパーティのサイトを供給するために消費される
  • 月間転送クォータがより速く枯渇する
  • 違反サイトへの各訪問でサーバーに追加負荷がかかる
  • 他のサイトのコンテンツを豊かにするために使われる画像のホスティング費用を負担する

極端な場合、あなたの画像をホットリンクしている高トラフィックのサイトは、サーバーの過負荷やクォータ超過を引き起こし、あなた自身のサイトを利用不能にする可能性があります。

方法1:.htaccess(Apache)でホットリンキングをブロック

これはApacheサーバーで最も古典的かつ効果的な方法です。.htaccessファイルで各リクエストのHTTP Refererヘッダーを確認できます — リクエストがあなたのドメインから来ていない場合、ブロックまたはリダイレクトされます。

サイトのルートにある.htaccessファイルにこれらの行を追加してください:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www.)?yourdomain.com [NC]
RewriteRule .(jpg|jpeg|png|gif|webp|svg|avif)$ - [F,L]

このルールはRefererがあなたのドメインでない画像リクエストをすべてブロックします。[F,L](403エラー)を警告画像へのリダイレクトに置き換えることができます:

RewriteRule .(jpg|jpeg|png|gif|webp|svg|avif)$ https://yourdomain.com/no-hotlink.png [R,L]
豆知識:条件RewriteCond %{HTTP_REFERER} !^$はRefererなしのリクエスト(直接アクセス、ブックマーク、開発者ツール)を許可します。これらもブロックしたい場合はこの行を削除してください — ただしHTMLメールやRSSアグリゲーターなど一部の正当なコンテキストで画像が表示されなくなる可能性があります。

方法2:Nginxでホットリンキングをブロック

Nginxサーバーでは、設定ファイルのserverまたはlocationブロックで保護を設定します:

location ~* .(jpg|jpeg|png|gif|webp|svg|avif)$ {
  valid_referers none blocked yourdomain.com *.yourdomain.com;
  if ($invalid_referer) {
    return 403;
  }
}

valid_referers none blockedディレクティブは直接アクセス(none)とRefererなしのリクエスト(blocked)を許可します。リストされたドメインのみが画像を埋め込めます。

方法3:Referrer-Policyを使用する

HTTP Referrer-Policyディレクティブはあなたのサイトからのリクエストで送信されるReferer情報を制御します。制限的なポリシーを設定することでサードパーティサイトが利用できる情報を減らせます — ただしこの方法は画像を積極的に保護するわけではなく、サイトURLの伝播を制限するだけです。

基本的な保護として.htaccessに追加:

Header set Referrer-Policy "same-origin"

方法4:CDNによる保護

CDN(Cloudflare、AWS CloudFront、Fastly…)経由で画像をホストしている場合、ホットリンク保護は通常管理パネルでネイティブに利用可能です:

  • Cloudflare:ダッシュボードのScrape ShieldタブでHotlink Protectionルールを有効にします。非承認ドメインからの画像リクエストを自動的にブロックします
  • AWS CloudFront:Lambda@Edge関数を使用してRefererヘッダーを確認し未承認リクエストをブロックします
  • Bunny CDN:ホットリンク保護はストレージゾーン設定で直接利用可能です

CDNの利点は二重です:保護は配信ネットワークレベルで管理され、オリジンサーバーに到達する前に機能します。サーバー設定を変更せずにすべてのアセットに適用されます。

方法5:定期的な画像の名前変更と移動

技術的に少ないが補完的なアプローチは、定期的に画像のURLを変更することです。外部の直接リンクはすぐに無効になります。このアプローチは名前変更スクリプトやコンテンツハッシュを使ったアセット管理(WebpackやViteがCSSやJSファイルに対してネイティブに行うように)で自動化できます。

方法6:一時アクセストークンの使用

機密性の高いまたは高トラフィックの画像には、有効期限付きの署名URLの生成が最も強固な保護です。原則:各画像URLには限られた期間(1時間、24時間…)有効な暗号化トークンが含まれています。この期間が過ぎるとURLは無効になります。

  • AWS S3:AWS SDKを通じたPresigned URLの生成
  • Cloudflare R2:設定可能な有効期限付きの署名URL
  • Bunny CDN:秘密鍵とタイムスタンプによるURL署名
方法難易度効果CDN互換
.htaccess(Apache)簡単良好部分的
Nginx設定中級良好部分的
ネイティブCDN(Cloudflareなど)非常に簡単非常に良好あり(ネイティブ)
定期的な名前変更可変平均あり
署名URL / トークン上級最大あり
豆知識:ホットリンク対策保護は完全に万全ではありません。決意のあるサイトは常にあなたの画像をダウンロードして自身のサーバーに再ホストできます — その場合は著作権の問題であり、ホットリンキングではありません。.htaccessやCDNによる保護は不正使用のほとんどをカバーし、日常的な帯域幅保護には十分です。