個人情報保護?


webサーバー上に配置した.mdbファイル(Accessデータベースファイル)をダウンロードさせない方法の例


個人情報流出

昨今、個人情報の流出問題が騒がれていますが、映画や小説にあるようなハッキングによる高度な侵入ばかりではなく「webサーバー上にデータの入ったファイルを配置していた」といったお粗末なものも多数あります。

つまり、
http://hogehoge.com/cgi/hogehoge.cgi
という個人情報を扱うwebアプリケーションが存在した場合、/cgiフォルダ内にデータファイルを配置(または生成)してしまい、ブラウザで直接
http://hogehoge.com/cgi/hogehoge.csv
(拡張子は.dat .txt など類推しやすいもの)を叩くと、データファイルが「ダウンロードできてしまった」というケースです。

IIS+ASP/ASP.NETで良くあるケース

ASP/ASP.NETでも同様のケースがあります。

ASP/ASP.NETの場合Access(.mdb)をデータベースに使うケースが多く見られます。

Accessはwebアプリケーションの様な同時アクセスをあまり考慮した作りになっていないようで
という主張も多く見られますが、 といった理由からAccessを選択しているケースも多く見られます。

(同時アクセスの問題とは別に)Accessを使用した場合でもHTTPとしてアクセスできるIISのドキュメントルート以下(デフォルトではC:\Inetpub\wwwroot)ではない場所に.mdbファイルを配置すれば、.mdbファイルがまるごとダウンロードされてしまうという不具合は防げるのですが、前出の入門書などには、

「.aspファイルと同じフォルダに.mdbファイルを配置し、Server.MapPath("hoge.mdb")で.mdbのパスを取得する」

といったサンプルが多数見受けられ、実際にそれに従ってしまっているケースも多く存在します。

そのため、「〜/hoge.asp」というwebアプリケーションがあった場合、「〜/hoge.mdb」とアドレスバーに入力するとデータ丸ごと(.mdbファイル)ダウンロードできてしまうといったケースがあります。

データファイルをダウンロードさせない方法の例

ASP/ASP.NET+Access(.mdb)に限らず、エクセルファイル(.xls)、CSVなどのテキストファイル(.csv .dat等)でも同様ですが、今回は.mdbファイルを例に取り、データファイルのダウンロードを未然に防ぐ方法です。

.mdbファイルの配置場所(wwwroot以下でない場所)のルール作りやIIS全体の管理ができていればもちろん問題ないのですが、 「そういったサーバー」の管理者を対象にした説明です。


以下の条件を前提として話を進めます。
図1 rp.aspxの画面
上記の前提だと、このようにrp.aspxの画面がある場合、ユーザーが推測で「〜rp.mdb」とアドレスバーに入力してしまうだけで

図2 ダウンロードダイアログ
データファイルがまるごとダウンロードされてしまいます。


そこでIISの管理画面にて図のように.mdbの拡張子に対して、「固定のCGI」

(この場合は
「(rubyのパス)\ruby.exe D:\usr\local\bin\dlerror.rb」)

を実行するような設定にします。
図3 IIS設定画面

dlerror.rbはこのように簡単なプレーンテキストを返すだけのCGIとなっています。
図4 Rubyスクリプトの内容


この設定をした後、「〜rp.mdb」とアドレスバーに入力すると、同様にダウンロードのダイアログが現れるので、一見.mdbファイルがダウンロード出来てしまったように見えますが、ダウンロードしたrp.mdbの内容をテキストエディタで見るとこのようなエラーメッセージのみのテキストファイルで、.mdbファイルのダウンロードが失敗していることがわかります。
図5 ダウンロードしたファイル

さいごに

対処的な方法ですが、「何もしないよりはましかな」という程度に思ってもらえれば。
今回はIISで.mdbの拡張子での設定例ですが、他のwebサーバー、他の拡張子でも同様な設定は可能かと思われます。

なお、当然ですが、<a href="hoge.mdb">の様にして、故意に.mdbファイルをダウンロードさせているような場合にはこの設定をしてしまうと、.mdbファイルがダウンロード出来なくなります。


※補足事項 (2005/03/29 追記)

履歴

2005/03/27 公開
2005/03/29 補足事項を追記

戻る