特定の参照元(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.com
の URI を含むリソースから .htaccess の設置されているディレクトリのファイルが参照された場合に、その参照を禁止する設定です。同じように SetEnvIf Referer
のディレクティブに続いて複数の URI を記述することで、複数の参照元のアクセスを禁止することも可能です。
1行目にある SetEnvIf
ディレクティブは、もし環境変数(Environment Variable)に http://www.hoge.com
が含まれる場合に、ref_ng
として参照を禁止するという命令の処理内容になります。ディレクティブとは「命令」という意味であり、SetEnvIf
ディレクティブに続く属性(オプション)の部分で命令の内容を指定します。上記では Refer
とあるので、これは参照元を定義します。
2行目の order
ディレクティブはアクセスの許可(allow)・禁止(deny)の評価の順番を決定するものです。上の例では、allow,deny
とあるので、allow
を deny
の先に記述しています。
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,allow
と deny
を allow
の先に記述しています。
4行目の deny from all
は order
ディレクティブの内容がorder
ディレクティブによって先に評価され、全ての参照元からのアクセスを禁止しています。
5行目の、allow
ディレクティブによって先に指定していた URI を含むリソースからの参照を許可します。
つまり、order
ディレクティブの指定で先に deny
ディレクティブを評価し、すべての参照が禁止されますが、次の allow
ディレクティブによって先の SetEnvIf Referer
に続いて指定された URI を含むリソースからの参照を許可します。これによって基本的にはすべての参照元を禁止して、一部の参照元からは許可する指定が可能になります。
特定の参照元を禁止・許可するのはどのような場合に有効か
通常、リンクは a
要素によって構成・提供されますが、画像ファイルの場合、直接 img
要素で第三者のウェブスペース上で公開されているリソースの絶対URI を指定することもできます。もちろん、そのような利用はモラルとして良くない行為とされています。
ひとつにレンタルしているウェブスペースであれば転送量が制限されていたり、勝手に第三者のウェブサイトから自サイト内の画像ファイルを呼び出されたのでは、転送量がその分増加するために第三者のウェブサイトから画像ファイルを直接参照する行為はやめて欲しいということが考えられます。
また、イラストやウェブページを飾る素材を配布することを目的としたコンテンツをもつサイトであれば、配布している画像ファイルに対し、第三者が自分のサイトに直接貼り付けて表示するような事が起こり得るかもしれません。もちろん、それは第三者自身に配布されている画像ファイルについてはローカルに保存してから自分のウェブスペース上にアップロードして利用するという知識が欠けているだけで、まったく悪意がないのかもしれませんが、配布元の転送量は知らず知らずのうちに増加してしまうことになりかねません。
このように第三者に勝手に利用されて困っているという時には、ここで取り上げた方法で特定の第三者のウェブサイトからの参照時の場合は表示できないように設定する、または自サイトからの参照の場合のみ参照を許可することで、勝手な画像の参照を未然に防ぐことができます。