【.htaccess】画像の直リンクを禁止する方法

公開日:
更新日:
カテゴリー: サーバー

暗黙のルールで画像の直リンクは禁止されていますが、ルールを知らない人もしくは「そんなのしったこっちゃない」という人は普通に画像の直リンクを行ってきます。

最近のサーバーは高性能なので少しくらいの直リンクではサーバー処理・転送量に影響はないのでスルーしても問題ないですが、アクセスの多いサイトから直リンクされた場合は由々しき問題となります。

しかしそういう場合はサーバー側で画像の直リンクを禁止してあげれば一件落着です。ここでは、apacheの「.htaccess」を使った画像の直リンク禁止の方法を説明します。

画像の直リンクを禁止

方法1

画像の直リンクを禁止する方法は、以下を記述した「.htaccess」を作成し、画像があるフォルダ(ディレクトリ)にアップロードするだけです。

#画像の直リンクを禁止する
SetEnvIf REFERER "○○○.com" OK
Order Deny,Allow
Deny from all
Allow from env=OK

○○○.com」のところに画像表示を許可するサイトのドメイン(「http://」の部分は不要)を入れます。外部サイトでももちろんOKです。

これで許可したサイト以外からの画像要求を拒否(403エラーを返す)でき、直リンクを禁止できます(URLの直打ちでの画像閲覧も拒否します)。

禁止されるのは画像だけではない

画像の直リンクを禁止する方法と書いていますが、上記方法では許可したドメイン以外からのファイル要求をサーバーが拒否します。

そのため、画像以外のファイルも取得拒否できるので、

  • 外部からアクセスされたくないファイルがある
  • しかしサーバーの中に入れておかなければならない

という状況下であれば、この設定が有効となります(とはいうものの、当然外部に漏れるリスクはあります)。

デメリット

この方法は、許可したドメイン以外からのファイル要求をサーバーが一律拒否するので、デメリットもあります。

それは、Googleなどの画像検索に表示されないことです。

画像検索からのアクセスがどのくらいあるかが重要ですが、上記方法を実行すると、当然画像検索の一覧に表示されませんのでアクセスを逃すデメリットがあります。

これを回避するためには方法2が有効です。

方法2

「mod_rewrite」を利用した直リンク禁止の方法です。

これは、方法1と同様に、参照元(画像が表示されるページ)のドメインを判断し、許可されたドメインの場合に画像データを渡します。

そのため無関係なサイトに直リンクされても、そのドメインが許可ドメインではない場合画像データを渡しません。

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?○○○.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

  • ○○○.com」の部分で画像表示を許可するドメインを指定
  • jpg|jpeg|png|gif」の部分で直リンクを禁止するファイルを指定

これを「.htaccess」に記述し、画像フォルダにアップロードすることで有効となります。

なお、この方法は方法1と同様に参照元のドメインを判断して画像データを渡すかどうかを決めるので、ファイアーウォールやセキュリティソフトによって参照元が削除される環境のユーザーがいた場合、そのユーザーには画像を表示しません。

そういった環境下にあるユーザーにも画像を表示したい場合、次のようにします(参照元がない場合にも画像を表示できるようにする)。

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?○○○.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

なおこの方法は、

  • 参照元がない場合
  • 参照元が許可ドメインであった場合

以外は画像データを渡しませんので、GoogleやYahoo、Bing検索の画像検索には自サイトの画像が表示されなくなります。

しかし、次のようにGoogle、Yahoo、Bingも許可ドメインに加えてあげることで、直リンクを禁止しつつ、画像検索の問題を解決できます。

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?○○○.com [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !bing\. [NC]
RewriteCond %{HTTP_REFERER} !yahoo\. [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

まとめ

本来、自サイトと関係のない外部サイトが自分側のリソースを使うこと自体おかしいですが、現状それを制約する法律などはないので仕方のないことです。

そのため状況に応じて適宜対応していかなければなりません。

 

あわせて読んでほしい!

 

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント