参照元によるアクセス制限

参照元によるアクセス制限とは一体どのようなものでしょう。まずは、どのような場面で使用すると有効か、ということから話を進めたいと思います。「参照元」という言葉に馴染みが無い方もおられるかと思いますが、これは「どこから呼び出されたか」という情報だと理解しておいて下さい。Webページであれば、どこから飛んできたか、ということになりますし、CGIプログラムであれば、どこからPOST(GET)されたか、ということになります。このような情報によってアクセス制限がかけれるとしたら、真っ先に思いつくのが「画像等ファイルへの直リンク」でしょう。勝手にファイルをダウンロードして勝手にそのファイルを公開するのであれば仕方がありません(それも許せない方は別の方法を取るしかないでしょうが、恐らく確実な方法は見つからないでしょう)。勝手にファイルにリンクを貼り、勝手に人のサーバの帯域を消耗させる輩に有効な対策です(ただし、絶対では無いので注意してください)。次に思いつくのが(私が思いつく順番ですが・・・)、掲示板荒らし対策です。掲示板への連続書込みプログラムは、大抵別サイトからのアクセスとなります。別サイトからの連続書込みであれば、この参照元によるアクセス制限によりある程度防ぐことができます。また、特定のCGIプログラムを、不正に他サイトから使用されないようにすることもできるでしょう。思いつくままに3点ほど例を挙げましたが、やはり一番有効なのはファイルへの直リンク防止でしょうね。CGIであれば、プログラムの方から参照元制限をすることもできるわけですから・・・「.htaccess」から制限するメリットはあまりないかもしれません。では早速記述例を見てみましょう。

SetEnvIf Referer "^http://www\.7key\.jp" ref_ok
order deny,allow
deny from all
allow from env=ref_ok

これは、「http://www.7key.jp」で始まるURL以外から呼び出された場合は拒否しなさい、という意味です。「Env」というのは「Environment」の略で、「環境変数」と訳されます。一行目を直訳しますと、もし、環境変数Refererが、「http://www.7key.jp」で始まっているならば、「env」に「ref_ok」をSetしなさい、となります。随分、投げやりな説明ですが大体ニュアンスはつかめたでしょうか。しかし、このままでは、HTMLファイル等全てのファイルにこの制限が適用されてしまい面白くありません。上記の例に、「画像ファイルのみ」という条件を加えてみましょう。

<Files ~ "\.(gif|jpe?g|png)$">
SetEnvIf Referer "^http://www\.7key\.jp" ref_ok
order deny,allow
deny from all
allow from env=ref_ok
</Files>

正規表現が解らない方には少しつらいかもしれません。一行目で、「.gif」「.jpg」「.jpeg」「.png」で終わるファイル名のファイルのみ、という条件を加えています。ただ、これでもまだ問題があります。閲覧者が「Norton Internet Security」や「Norton Personal Firewall」などのソフトを利用している場合、これらのソフトはデフォルトで「Referer」を送信しないように設定されています。よって上記の制限をかけている場合、画像などが一切表示されなくなる方も出てくるでしょう。気休めではありますが、以下の1文を3行目に加えておくことをお奨めします。

SetEnvIf Referer "^$" ref_ok

これは、Refererがもし空白であれば、「env」に「ref_ok」をSetしなさい、という条件を加えていることになります。