.htaccess活用法(5)

.htaccess(拡張子がhtaccessということで、ドットが必要です。ファイル名がないので最初戸惑いますが、こういうものだと思ってください。)が利用可能だと、

5.ブラウザ経由でのアクセスを一切拒否する

2002年夏、データ流出事故を報じるニュースが相次ぎました。一例を挙げれば、

●エステティックサロンTBCのデータ流出事故(2002年5月)
http://www.zdnet.co.jp/news/0205/27/njbt_06.html
※URLは事件を報じるZDnet Wire Newsのもの。約3万件の個人情報がWEBで閲覧可能になっていた。

●パソコン教室アビバのデータ流出事故(2002年7月)
http://www.zdnet.co.jp/news/0207/03/njbt_04.html
※URLは事件を報じるZDnet Wire Newsのもの。2093件のユーザーデータが閲覧可能になっていた。



〔ラピッドサイト〕仮想専用サーバ「VPS!RVシリーズ大好評」


.htaccess自体にアクセスできないようにするには?
せっかく.htaccessや.htpasswd(後者のファイル名は任意なので、.htpasswdというファイル名かどうかは分かりませんが)によって、コンテンツを守ったとしても、.htaccessや.htpasswd自体にhttp://〜経由でアクセスできてしまっては、元もこうもありません。

.htpasswdに書かれているパスワードはDES暗号化されているとは言え、パスワードファイルが漏れることによりクラッキングされる可能性はそれだけ増えます。攻撃者は自分のサーバで(誰にも怪しまれることなく)時間をかけて総当たりでパスワードを試すことが可能になります。

.htpasswdはDocumentRootより上に設置するのは当然として、問題は.htaccessです。これは、DocumentRootの下に置かなければ意味がありません。利用しているレンタルサーバの設定で既に.htaccessへのアクセスができないように(403 Forbiddenというステータスを返すように)しているならばOKですが、そうでない場合は、自分で設定する必要があります。

<Files ~ "^\.ht">
deny from all
</Files>

として、「.ht」で始まるファイルは全てアクセス禁止とできます。これなら、.htpasswdもDocumentRootの下に置いても一応大丈夫なはずですが、それでもDocumentRootより上に設置した方が安全だと思います。

●ブルドックソースのデータ流出事故(2002年8月)
http://bizns.nikkeibp.co.jp/cgi-bin/search/wcs-bun.cgi?ID=202687&FORM=biztechnews
※URLは事件を報じる日経BP社のBizTechのもの。約5万件のデータが閲覧可能になっていた。

●カバヤ食品のデータ流出事故
http://www.mainichi.co.jp/digital/netfile/archive/200208/22-8.html
※URLは事件を報じるMainichi Interactiveのもの。3,244件のデータが閲覧可能になっていた。


これらの流出事故では、いずれも、特定のアドレスをブラウザのアドレス欄に直接入力すると閲覧可能な状態になっていました。つまり、パスワードなどで保護されていませんでした。

そのことをもって、そのようなデータ閲覧が可能なURLを不特定多数の人に掲示板で告知する行為は決して許されるものではありませんが、サイト管理者の責任は問われてしかるべきだと考えます。.htaccessを利用すれば、このような"不正アクセス"は簡単に予防できるのですから。

<Files ~ "\.(dat|log|csv)$">
deny from all
</Files>

などとするだけで、「xxx.dat」(xxxは任意のファイル名)や「yyy.csv」(yyyは任意のファイル名)へのブラウザ(正確には、ブラウザでなくても良いので、ユーザーエージェント)経由でのアクセスは、できなくなります。

これだと、プログラム(例えばCGIファイル)経由でデータファイルを読み込めないのではと考えられるかもしれませんが、そんなことはありません。CGI経由であれば、読み込みは可能です。ご安心を。

上の正規表現のところを念のため説明しておきますと、上の例では、「.」は正規表現の中では「任意の文字」を表すメタ文字ですが、こここでは、拡張子の「.」(ドット)であり、特別な意味はありませんので、エスケープ文字である「\」をつけて、後ろに続く「.」はメタ文字のそれではないよということを表しています。続いて、拡張子は、「.dat」もしくは「.log」もしくは「.csv」であることを示すために、「|」を使っています。「|」は「or(もしくは)」という意味のメタ文字です。最後にある「$」は「文字列の末尾」を表します。これを付ける事により、例えば、「abc.data」や「xyz.log.txt」はアクセス制限の対象外にすることができます。

これにより、直接URLをたたいたりされることでの流出は防げますが、そもそも、なぜどこからもリンクされていないデータファイルのURLが外部に漏れてしまうのでしょうか? 可能性としては、

  • データファイルによく使われるファイル名を推測されるケース。data.txt、customer.csv、order.txtなど。特に、Web上で公開されているフリーのCGIなどを利用している場合、データファイル名や格納場所(CGIから見た場合の位置関係というかパス)などはデフォルトのまま利用されていることが圧倒的で、推測が非常に容易です。しっかりとした対策がなされていない場合、ダウンロードされてしまいます。

  • 検索エンジンに掲載されてしまった場合。なぜ、どこからもリンクされていないファイルが検索エンジンに掲載されるかの謎については後述します。

  • いわゆるハッキング(クラッキング)

  • 退社した元社員などからの情報流出
などがあると思います。ここで、注目したいのが、「2」のケースです。なぜ、どこからもリンクされていないのに、検索エンジンに掲載される場合があるのでしょうか。Apacheの機能で、URLの末尾にファイル名が指定されず、「/(スラッシュ)」止めでアクセスされた場合に、index.htmlやindex.cgiなどを表示する機能がありますが、これらのファイルもない場合、Apacheはそのディレクトリーの中にあるファイルの一覧を右上の画像のように表示することがあります。それぞれのファイルにはリンクが貼られていますので、例えば、この中にdata.csvがあれば、データファイルの存在箇所が公開されていることになります。

そして、検索エンジン・ロボットの中には巡回時に、効率的にファイルをインデックスしていくことを目的にするのか、この「スラッシュ」止めでアクセスし、ファイルの一覧を取得できるか試みるものがあります。すると、検索エンジンに掲載したくないファイルまで検索エンジンに掲載される可能性があることになります。

これを防ぐためには、.htaccessで、

Options -Indexes

と一行書くだけで良いのです。こうしておけば、index.htmlなどがない場合にスラッシュ止めでアクセスされた場合、左の画像のようなエラーメッセージ(あなたは、このURLにアクセスする権限がありません。というようなメッセージ。)が表示されます。

この「Options -Indexes」の「-」は「マイナス」を意味します。Apacheのoptionsから「Indexes機能」はマイナスにする、すなわち使わないという意味になります。逆に、このようなディレクトリー内ファイル一覧表示機能が、レンタルサーバ管理者によりoffにされている場合に、この機能を敢えて使いたい場合は、「Options +Indexes」もしくは「Options Indexes」とします。「+(プラス)」が無ければ、その機能をonにすることになります。


--広告--
【PR】 インターネットでお小遣い。アフィリエイトプログラム徹底導入術

【PR】 格安プロバイダ v.s. 無料プロバイダ

【PR】 TOEICリスニング倶楽部

このような.htaccess機能により、希望しないファイルが検索エンジンに収集される危険性を回避できます(もちろん、単純に中身が空でも良いので、index.htmlを設置するだけでも、対処作にはなります)。しかし、そもそもの問題として、重要なデータをhttp://〜でアクセスできるようなところに置いているのが問題とも言えます。つまり、DocumentRoot以下(多くの場合、/home/××/public_html/以下?)に置いているのが、そもそも問題であって、重要なファイルがDocumentRootより上にあれば、ブラウザ経由などで(http://〜で)アクセスしようがないわけです。

慣れないうちは、CGIファイルのすぐ近くにデータファイルなども設置しがちです。また、公開されている多くのフリーのCGIでもそのようになっていますが、これは、あらゆる環境にいるユーザーを対象とする場合、DocumentRootより上にデータファイルを置くというような書き方は、CGI初心者(もしくはCGIを全く知らない人)を対象として配布する限り、とてもできないことだと思います。しかし、DocumentRootの下に置くことは、このような危険を伴うことをウェブ管理者たるものは知る必要があると思います。その上で、避けられない場合は、.htaccessでしっかりとアクセス制限を行うべきです。


   ※「ディレクティブ」とは「命令」の意味

▼ Allowディレクティブ、Denyディレクティブ、Orderディレクティブ
http://httpd.apache.org/docs-2.0/ja/mod/mod_access.html

▼ <Files> ディレクティブ
http://httpd.apache.org/docs/mod/core.html#files

▼ Options ディレクティブ
http://httpd.apache.org/docs/mod/core.html#options



次のページでは、あるURLにアクセスした際に別のURLに自動転送する機能について見てみます。