● Refererによるアクセス制御における注意点

想定しているReferer(参照元。直前のページ)以外からのアクセスの場合、アクセスを禁止したい場合があります。例えば、お気に入りや履歴からのアクセスを防止したい場合などです。そのような場合に利用可能なオプションです。なお、Refererが何かが分からない方は、申し訳ありませんが、このオプションのご利用はお控えください。

ただし、特に重要な注意点が二つ、あります。

1.Refererは偽装可能です。

上級者はRefererを偽装する方法を知っています。Refererが正しいからといって、必ずしも、正当なアクセスかどうかは分かりません。


2.特定の製品を使っている場合などに、正当なアクセスなのに、Refererが空になる場合があります。

古いバージョンのNorton Internet Securityなどのセキュリティ製品を利用している場合に、Refererが遮断される場合があります。そのため、エラーメッセージが分かりにくいと、無実のサイト訪問者が悩んでしまうことになります。

▼ 参照元 (リファラ) が遮断され、Web サイトが正しく表示されない (Norton Internet Security 2003/Norton Personal Firewall 2003)
http://service1.symantec.com/SUPPORT/INTER/nisjapanesekb.nsf/jp_docid/20021020160209947

▼ アクセスカウンタや掲示板が正しく表示されない (Norton Internet Security 2004/インストール後)
http://service1.symantec.com/SUPPORT/INTER/nisjapanesekb.nsf/jp_docid/20031024163125947?Open&src=&docid=20020617223337947&nsf=SUPPORT%5CINTER%5Cnisjapanesekb.nsf&view=jp_docid&dtype=&prod=&ver=&osv=&osv_lvl=

などをご参照ください。など、Norton Internet Secuirty 2005では、この問題の改善が行われ、「リファラーのブロックは異なるドメイン(リンク元ページの URL)のみ遮断します 同じドメインの場合は許可します。」とのことです。

上のような製品を使っていない場合でも、ブラウザの設定や、ブラウザに無料のプラグインなどを入れる形で、Refererの送信を無効にしているユーザーもいます。

そのような場合、Refererを送信していないことが原因でページを閲覧できないんだということをユーザーが理解しないと、「何回やっても表示されない→どうなっているの? バグっているの?」となることもあるかもしれません。かといって、Refererを送信するように設定を促すエラーメッセージを書くと、攻撃者に「Refererを偽装すれば閲覧できるんだな」と余計な情報を渡すことになってしまう場合もありえます。難しいところです。

どのようなメッセージを表示させるかはお客様で最終的には考えていただかなければなりませんが、弊社で準備しましたサンプルをご参照の上、SHTML製品版ユーザーの方(体験版ユーザーの方はご遠慮ください。)は、ご自由にカスタマイズしていただいて構いません。

3.設定方法


例えば、「許可するRefererのURL」を
http://www.example.com
とした場合、Refererが
http://www.example.com
http://www.example.com/entry.html
http://www.example.com/abc/index.html
http://www.example.com/?mode=disp
http://www.example.com/abc/test.php
の全てでOKとなります。

もちろん、
× http://www.example2.com
× (Refererが空)
などはアウトになります。自動転送の対象になります。

もし、「許可するRefererのURL」を
http://www.example.com/abc/
とすれば、
× http://www.example.com
× http://www.example.com/entry.html
http://www.example.com/abc/index.html
× http://www.example.com/?mode=disp
http://www.example.com/abc/test.php
になります。さらに、「許可するRefererのURL」を

http://www.example.com/abc/index.html
とすれば、
× http://www.example.com
× http://www.example.com/entry.html
http://www.example.com/abc/index.html
× http://www.example.com/?mode=disp
× http://www.example.com/abc/test.php
になります。

また、この場合、
http://www.example.com/abc/index.html?123
http://www.example.com/abc/index.html?mode=1
などもOKとなることに注意してください。

最後に重要なことですが、Refererが正当かどうかはURLの先頭部分をチェックしています。したがって、Refererを
http://www.example.com
とした場合、 × http://www.example2.com/attack.html?http://www.example.com
には、確かにhttp://www.example.com が含まれていますが、エラーになります。また、
× https://www.example.com
がRefererの場合もエラーになります。SSLと非SSLのURLがともにRefererになりえるようなケースでは、本オプションはご利用になれません。

「許可するRefererのURL」を設定するのではなく、逆に「禁止するRefererのURL」を設定する場合も、「禁止するRefererのURL」に該当するかどうかの判断基準は「許可するRefererのURL」のそれと全く一緒です。

この「×」だった場合に自動転送する先のURLを入力していただく必要があります。(上の画面キャプチャーの画像で言えば、「http://www.example.com/top.html」がこれにあたります。)

自動転送先は、例えば本来の入り口ページであったり、エラーメッセージを掲載したページ(サンプル)を設定してください。前者の場合、Refererの設定が問題であるということに気づかないユーザーは延々とその設定されたページに引き戻されることになりますので注意してください。後者の場合はエラーメッセージを工夫するようにしてください。

4.その他のご注意

  • 本オプションでは、RefererのチェックにJavaScriptで行っています。Refererのチェックは、JavaScriptを使わずとも、.htaccessやPerl・PHPなどのプログラム内でも行うことができます。JavaScriptをoffにしてていてもチェックが可能な「.htaccess」「Perl」「PHP」内でのチェックのほうが勝っています。HTMLファイルに対するアクセス制御で、.htaccessの設定方法が分からない場合のみ、このオプションをご利用ください。.htaccessが利用可能な場合や、PHPプログラムに対するアクセス制御としてはオススメできません。

    なお、.htaccessについては、下記もご参照ください。
    ▼ .htaccess実践活用術
    http://www.shtml.jp/htaccess/

  • このオプションを使われる場合に限ったことではありまえんが、必ずご自身でテストをされた上で公開してください。  お客様側の設定ミスに対してはもちろんのこと、弊社側のプログラム上の欠陥等に起因する場合でも、恐縮ではありますが一切の責任を負いかねます。ご注意ください。

  • 公開前に、Macでの動作テストがしたい方でMacをお持ちでない方は、弊社サポートまでご連絡ください。最初の1回だけですが、無料で動作確認させていただきます。

  • 「許可するRefererのURL」や「禁止するRefererのURL」は一つのみURLを設定可能であり、複数の設定はできません。また、同時には使えません。ご希望の場合にはカスタマイズ版(有料)を作成させてもらうことも可能です。サポートまでご相談ください。

  • 本オプションは、「HTMLファイルに対するアクセス制御」であって、HTMLファイル内に存在する画像ファイル(JPEGやGIFファイル)などへのアクセス制御にはご利用になれません。画像ファイルへのアクセス制御(直リンク禁止など)が必要な場合は、.htaccessもしくはPHPなどのサーバサイド・プログラミングが必要です。

  • JavaScriptによるwindow.openによってページを開いた場合や、JavaScriptのlocation.hrefなどでページ遷移した場合、想像とは違って、Refererが空になるブラウザ(Windows版IEなど。)が存在します(弊社がテストした限りでは、FirefoxやOperaなどでは、空ではなく想像通りのRefererになるようです)。普通想像するRefererは、通常のリンク:「<a href="next.html">次のページ</a>」及びformタグ内のsubmitボタン(<input type=submit 〜>)をクリックすることでページ遷移する場合のみとお考えください。「<input type=button onClick="〜>は不可です。

    5.Refererチェック・サンプル

    サンプルを準備しました。仕様をより深く理解していただくために、是非ご活用ください。


  • © 株式会社プランセス