Apacheで画像への直リンクを禁止する

Apache で公開しているコンテンツの中にある画像ファイルに対して、別のサイトのページ内から画像ファイルを参照して表示させることができます。このような方法で別のところで公開されている画像ファイルを参照して表示させる方法を一般的に画像の直リンクといった言い方をします。画像の直リンクが行われると、画像が参照されるたびに画像が設置されているサーバに負荷がかかるため、画像の直リンクは禁止しているところもあります。ここでは Apache で公開している画像ファイルに対して外部からの直リンクを禁止する設定方法について解説します。

(Last modified: )

Apacheで画像の直リンクを禁止する

画像の直リンクを禁止する方法として、画像に対するリクエストのリファラーをチェックし、リファラーが自分のサイトだった場合には画像へのアクセスを許可するけれど、そうでなかった場合はアクセスを拒否します。リファラーとは参照元のことです。自分のサイトの Web ページの中から画像が読み込まれている場合はリファラーは自分のサイトとなります。

Apache でリクエストのリファラーをチェックするには SetEnvIf ディレクティブを使用します。 SetEnvIf ディレクティブではリファラーをチェックし、別途指定した正規表現とマッチする場合に環境変数に対して値を設定できます。

例えば Apache で公開しているサイトが www.example.com だった場合は次のように記述します。

SetEnvIf Referer "www\.example\.com" imagecheck

自分のサイトから自分のサイトの画像へリクエストがあった場合などリファラーに www.example.com が含まれていたら環境変数 imagecheck が定義されます(値が省略されているので 1 が設定されます)。逆に言えば、別のサイトから画像へのリクエストがあった場合は、 リファラーに www.examle.com が含まれないので環境変数が定義されません。

※ SetEnvIf ディレクティブの使い方については「SetEnvIfディレクティブ:リクエストに含まれる情報に基づいて環境変数を設定する」を参照されてください。

次に Require env ディレクティブを使って指定した環境変数が定義されていなければアクセスを許可しない設定を行います。

SetEnvIf Referer "www\.example\.com" imagecheck
Require env imagecheck

今回は Apache で公開しているコンテンツの中の画像ファイルに対してアクセスを制限したいので、 httpd.conf に次のように記述します。末尾が .jpg .jpeg .webp のファイルに対してアクセスを許可しません。

<FilesMatch "\.(jpg|jpeg|png)$">
    SetEnvIf Referer "www\.example\.com" imagecheck
    Require env imagecheck
</FilesMatch>

Apacheで画像の直リンクを禁止する(1)

※ Require env ディレクティブの使い方については「指定の環境変数が定義されていれば許可する(Require env)」を参照されてください。

これで画像の直リンクを禁止する設定は完了です。。

-- --

Apache で公開している画像ファイルに対して外部からの直リンクを禁止する設定方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。