Active Server のソースが見えてしまうというバグは、ご存知の事だと思う。 ファイル名の後に続けて、":$$DATA" と入れて、「ブラウザのソースを見る」で見てみると、ソースが見えてしまうというものである。 ASP のソースが、ユーザーに見えてしまうという事は、ASP のソースにじかに、データベース名や、接続パスワードなどを記述してしまった場合、データベースサーバーは、非常に危険な状態に置かれることになる。 「イントラネットのウェブサーバー&データベースサーバーだから、大丈夫」と思っているASP開発者の方々!... 驚くなかれ!....ハッキングや、クラッキングの半分以上は、社内犯罪である(このあたりは、いろろいな調査会社や、FBI の報告を参考にしている)ことに留意してもらいたい。 つまり、 「セキュリティは、ファイアウォールに任せて、自分たちの作るASPアプリケーションには関係ないのさ」とはいかないのである。 さて、上述のバグについてですが、HotFix や、ServicePack を当てればいい。という対処法が思いつくと思います。 この考えは、正しいとは思います。 ....しかし、これだけで大丈夫でしょうか? 実際、この対応(HotFix や、ServicePack を当てる事)は、必要だと言えるし、非常に有効な対処法だと自分でも考えます。 もう少し、考えてみて、別の手段を模索してみます。 ASP ファイルに対してのバグなのだから、global.asa にパスワードなどの機密情報を記述して、ASP は、それをApplication 変数(Application オブジェクト)を介してASPは、利用すればいい。 という対処法はどうでしょうか? 自分は、原則的にこの考えであります。 しかし、global.asa に対しても、上述のバグは、有効なのです。 "http://....../global.asa:$$DATA" としたところ、global.asa のソースが漏れてしまうのです。 うーーん、どうしよう。という事になります この方向性は、間違っていたのでしょうか? そこで、さらに一歩進めます。 global.asa にも書かなければいいではないか。と... つまり、global.asa から、別のファイル(設定情報{機密情報}だけ記述されたファイル)を読み込めばいいではないか。と!......(びっくりマーク付けちゃう) しかし、global.asa からは、Request オブジェクトなど、有効なオブジェクトを読み出すことができません。 (global.asa 内の、Application_OnStart 関数からは、いろいろと利用できるオブジェクトに制限があります。{詳しくは、ASP のヘルプを参照} それじゃ、各 ASP ファイルから、毎回読み出せばいいという事になりますが、それは、プログラムの開発工程に"煩雑さ"を与えると思います。 つまり、グローバル変数でなければいけない値をローカル変数にする事の弊害です) そこで、作ったプログラムが、本プログラムであります。 本プログラムは、VisualBASIC6.0 で作成されていますので、例のごとく、対応するバージョンのランタイム・ライブラリ等をどこかから入手してください。 本プログラムは、COM コンポーネントになっており(DLL 形式)、本プログラムを利用することで、簡単に、Application_OnStart 関数などから設定ファイルを読み出すことが可能です。 自分の作成した、チャットプログラムでも使用しています。 ソースも付属しているので、(VisualBASIC6.0)十分納得した上で、利用する事も可能です。 |
例えば、以下のようなディレクトリ構成にします。 このようにすれば、 機密情報などの記述されている設定ファイルは、HTTP プロトコルを利用して、リモートからアクセスできないわけです。 そして、設定ファイルに記述されている機密情報などの情報は、global.asa が、本プログラムを介して、Application変数(Application オブジェクト)へ読み込まれます。 (各、ASP ファイルが、本プログラムを介して、読み出してもいいのでしょうが、ファイルの読み出し(遅いディスクアクセス)を何度もやらない方がいいのではないでしょうか? この辺は、詳しくないので、詳しい方!...メールください...m(_ _)m) まず、設定ファイルを、以下のような書式で記述します。
とする事で、アプリケーション変数{Application("password")}に、パスワード "abcdefghijk" が格納されます。 この欠点は、設定ファイルを更新(値の変更)をしても、それだけでは、反映されない点です。 反映させるには、ASP の再起動が必要になります。(つまり、global.asa の上書き) 面倒ならば、Application_OnStart 関数から、Session_OnStart 関数にする事をお勧めします。(とする事で、次のセッションから有効になります。 でも、セッションの発生ごとに読みに行くの?...) 利点は、上述のセキュリティの面で強化される事と、ASP と、何かローカルアプリケーション(例えば、Windows Scripting Host)との設定ファイルの共有・統合が可能となります。 |
VisualBASIC6.0 用のランタイムをどこかから(ex:Vector)ダウンロードしてインストールしておきます。 (既に、VisualBASIC6.0 がインストールされていればそれで十分です) ダウンロードしたファイルを解凍しします。 (LHAは、吉崎栄泰氏が、著作権を所有) 解凍して出来たディレクトリのうち、"vb6" は、VisualBASIC6.0 用です。 あとは、VB6 のどちらか(各自の環境に合わせて)の Get_Path.dll を適切な(お好きな)ディレクトリへコピーします。 そして、Get_Path.dll を RegSvr32.exe を利用して、レジストリに登録します。 または、ダウンロードして出来たディレクトリにある RegSvr.bat を、Get_Path.dll と同じディレクトリへコピーして、RegSvr.bat を実行してもいいです。 最後に、Get_Path.dll 自体に、適切なアクセス権を設定します。 |
ファイル内容は、VisualBasic 6.0 用のソースと、コンパイル済みDLLファイルです。 別途、VisualBASIC6.0 ランタイムが必要です。 その、DLL を、"regsvr32.exe" プログラムで、レジストリに登録すれば、利用できるようになります。 拙者作の 「ASP でチャット」 にてこれを利用しています。 |
get_path.lzh(FileSize = 14,935byte) (get_path.lzh.base64) |
|