個人情報保護?
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アプリケーションの様な同時アクセスをあまり考慮した作りになっていないようで
- 「webアプリケーションにAccessを使うべきではない」
- 「SQL Server/MSDEなどの同時アクセスを考慮されたデータベースシステムを使うべきだ」
という主張も多く見られますが、
- Accessだと手軽である
- ASP/ASP.NETのデータベースにAccessを使用した入門書などが存在する(意外と多い)
といった理由から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全体の管理ができていればもちろん問題ないのですが、
- 複数の人間がwebアプリを配置するので完全な管理が出来ない(レンタルサーバーのようなイメージ)
- 何らかの事情でwwwroot以下にデータファイルを配置しなければならない
(webアプリ作成者に、FTPやファイルサーバーの権限的に、wwwroot以下しかファイルを置けないようにしている、など)
「そういったサーバー」の管理者を対象にした説明です。
以下の条件を前提として話を進めます。
- /test/rp/rp.aspx というASP.NETアプリケーションが存在する
- そのデータはAccessファイルで/test/rp/rp.mdbに存在する

上記の前提だと、このようにrp.aspxの画面がある場合、ユーザーが推測で「〜rp.mdb」とアドレスバーに入力してしまうだけで

データファイルがまるごとダウンロードされてしまいます。
そこでIISの管理画面にて図のように.mdbの拡張子に対して、「固定のCGI」
(この場合は
「(rubyのパス)\ruby.exe D:\usr\local\bin\dlerror.rb」)
を実行するような設定にします。

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

この設定をした後、「〜rp.mdb」とアドレスバーに入力すると、同様にダウンロードのダイアログが現れるので、一見.mdbファイルがダウンロード出来てしまったように見えますが、ダウンロードしたrp.mdbの内容をテキストエディタで見るとこのようなエラーメッセージのみのテキストファイルで、.mdbファイルのダウンロードが失敗していることがわかります。
さいごに
対処的な方法ですが、「何もしないよりはましかな」という程度に思ってもらえれば。
今回はIISで.mdbの拡張子での設定例ですが、他のwebサーバー、他の拡張子でも同様な設定は可能かと思われます。
なお、当然ですが、<a href="hoge.mdb">の様にして、故意に.mdbファイルをダウンロードさせているような場合にはこの設定をしてしまうと、.mdbファイルがダウンロード出来なくなります。
※補足事項 (2005/03/29 追記)
- 今回はRubyのCGIで例を示しましたが、Perl、C言語によるバイナリ(Windowsで言えば.exe形式)など別言語のCGIでももちろん可能です
- 設定変更後、.mdbを指定したとき、ブラウザの種類やクライアント環境の状況によってはダウンロードダイアログが表示されずに、ブラウザに直接「.mdbファイルのダウンロードは禁止になっています。」というテキストが表示される場合もあります
履歴
2005/03/27 公開
2005/03/29 補足事項を追記
戻る