特定の参照元(Referer)の禁止と許可

Updated / Published

.htaccessにてSetEnvIfディレクティブで特定の参照元(Referer)のアクセスを許可、または禁止する設定例を紹介します。

特定の参照元(Referer)の禁止

SetEnvIf Referer "^http://www\.hoge\.com" ref_ng
order allow,deny
allow from all
deny from env=ref_ng

これは http://www.hoge.comURI を含むリソースから .htaccess の設置されているディレクトリのファイルが参照された場合に、その参照を禁止する設定です。同じように SetEnvIf Referer のディレクティブに続いて複数の URI を記述することで、複数の参照元のアクセスを禁止することも可能です。

1行目にある SetEnvIfディレクティブは、もし環境変数(Environment Variable)に http://www.hoge.com が含まれる場合に、ref_ng として参照を禁止するという命令の処理内容になります。ディレクティブとは「命令」という意味であり、SetEnvIfディレクティブに続く属性(オプション)の部分で命令の内容を指定します。上記では Refer とあるので、これは参照元を定義します。

2行目の orderディレクティブはアクセスの許可(allow)・禁止(deny)の評価の順番を決定するものです。上の例では、allow,denyとあるので、allowdeny の先に記述しています。

3行目の allow from all は、allowディレクティブの内容がorderディレクティブによって先に評価され、全ての参照元からのアクセスを許可しています。

4行目の denyディレクティブによって先に指定していた URI を含むリソースからの参照だけを禁止します。

つまり、 orderディレクティブの指定で先に allowディレクティブを評価し、すべての参照元が許可されますが、次の denyディレクティブによって先の SetEnvIf Referer に続いて指定されている URI を含むリソースからの参照だけを禁止します。これによって基本的にはすべての参照元を許可して、一部の参照元からは禁止する指定が可能になります。今度は基本的にはすべての参照元を禁止して、一部の参照元を許可する場合の指定方法についてみてみましょう。

特定の参照元(Referer)の許可

SetEnvIf Referer "^http://www\.hoge\.com" ref_ok
SetEnvIf Referer "^$" ref_ok
order deny,allow
deny from all
allow from env=ref_ok

こちらは http://www.hoge.com の URI を含むリソースから .htaccess の設置されているディレクトリのファイルが参照された場合に、参照を許可する設定です。SetEnvIf Referer に続いて複数の URI を記述することで、複数の参照元のアクセスを許可することも可能です。

1行目の SetEnvIfディレクティブは、もし環境変数に http://www.hoge.com が含まれる場合に、ref_ok として 参照(referer)を許可するという命令の処理内容です。

2行目に SetEnvIf Referer "^$" ref_ok とあるのは、ユーザがセキュリティソフトを入れている場合に、環境変数が空になるように設定されている場合でもアクセスできるように許可している指定です。

3行目の orderディレクティブはアクセスの許可(allow)・禁止(deny)の評価の順番を決定するものです。上の例では、deny,allowdenyallow の先に記述しています。

4行目の deny from allorderディレクティブの内容がorderディレクティブによって先に評価され、全ての参照元からのアクセスを禁止しています。

5行目の、allowディレクティブによって先に指定していた URI を含むリソースからの参照を許可します。

つまり、orderディレクティブの指定で先に denyディレクティブを評価し、すべての参照が禁止されますが、次の allowディレクティブによって先の SetEnvIf Referer に続いて指定された URI を含むリソースからの参照を許可します。これによって基本的にはすべての参照元を禁止して、一部の参照元からは許可する指定が可能になります。

特定の参照元を禁止・許可するのはどのような場合に有効か

通常、リンクは a要素によって構成・提供されますが、画像ファイルの場合、直接 img要素で第三者のウェブスペース上で公開されているリソースの絶対URI を指定することもできます。もちろん、そのような利用はモラルとして良くない行為とされています。

ひとつにレンタルしているウェブスペースであれば転送量が制限されていたり、勝手に第三者のウェブサイトから自サイト内の画像ファイルを呼び出されたのでは、転送量がその分増加するために第三者のウェブサイトから画像ファイルを直接参照する行為はやめて欲しいということが考えられます。

また、イラストやウェブページを飾る素材を配布することを目的としたコンテンツをもつサイトであれば、配布している画像ファイルに対し、第三者が自分のサイトに直接貼り付けて表示するような事が起こり得るかもしれません。もちろん、それは第三者自身に配布されている画像ファイルについてはローカルに保存してから自分のウェブスペース上にアップロードして利用するという知識が欠けているだけで、まったく悪意がないのかもしれませんが、配布元の転送量は知らず知らずのうちに増加してしまうことになりかねません。

このように第三者に勝手に利用されて困っているという時には、ここで取り上げた方法で特定の第三者のウェブサイトからの参照時の場合は表示できないように設定する、または自サイトからの参照の場合のみ参照を許可することで、勝手な画像の参照を未然に防ぐことができます。