画像などへの直リンクによる外部呼び出しを禁止する方法

画像などに直リンクを貼り、自分のサイトの外部から呼び出すということをする人がいます。これはマナー違反です。放置すると、自分のサーバーのリソースを消耗し、困ったことになります。これに対する対策としては、これをこちらのサーバー側で禁止するしかありません。

禁止するには、下記記述の.htaccessを画像ファイルを置いているディレクトリーに設置します。下記のような.htaccess以外では禁止する方法がありません。

自分のサイトを訪問している人のみ許可する場合

自分のサイト:abc.com

SetEnvIf Referer "^http://www\.abc\.com" allow_ref
SetEnvIf Referer "^http://abc\.com" allow_ref
SetEnvIf Referer "^https://www\.abc\.com" allow_ref
SetEnvIf Referer "^https://abc\.com" allow_ref
SetEnvIf Referer "^$" allow_ref
order allow,deny
allow from env=allow_ref

この記述の意味は、refererに下記のものを含む場合のみアクセスを許可するというものです。

「refererなし」というのは、ブラウザーのアドレスバーに画像などのURLを貼り付けて見ている場合やセキュリティーソフトの機能によりrefererを送信していない場合などが該当します。

http://www.abc.com
http://abc.com
https://www.abc.com
https://abc.com
refererなし

さらに、allow fromに日本のIPアドレスを入れると、日本だけからしかアクセスできません。海外からのアクセスを拒否したい場合は、お勧めです。

また、ついでに、検索エンジンのユーザー・エージェントを指定して、検索エンジンによる画像のインデックスを阻止することもできます。これは大変お勧めです。

なお、order allow,denyのところは下記記述でも同じ意味になります。お好みにより下記記述に置き換えてもいいです。

order deny,allow
deny from all
allow from env=allow_ref

注意事項

この直リンク禁止の記述を.htaccessに書くとWordPressのプラグインCount per Dayでアクセス状況を表示するグラフが表示されないことがわかりました。他のプラグインでも、何らかの問題が生じる可能性がありますので、お気をつけ下さい。

この方法を逆方向に使って、特定のサイトでの外部呼び出しを拒否することもできます。

特定の外部サイトが直リンクを貼ることを禁止

特定の外部サイト:def.com

SetEnvIf Referer "^http://www\.def\.com" deny_ref
SetEnvIf Referer "^http://def\.com" deny_ref
SetEnvIf Referer "^https://www\.def\.com" deny_ref
SetEnvIf Referer "^https://def\.com" deny_ref
order allow,deny
allow from all
deny from env=deny_ref

ちなみに、上記の.htaccessの記述にある\マークはその後の記号をサーバーが正しく読み込むために必要な記号です。

なお、.htaccessファイルを保存する際は下記関連ページを参考にしてください。

関連ページ:
UTF-8の.htaccessによりエラーが発生する場合