セキュリティに関するヒント

戻る

VBでCGIを作るという段階で、セキュリティには相当気を配る心構えが必要になる。このことは何度でも繰り返しておく。この項については、リスクが大きいから書きたくもないのだけど、実際に経験したことだけ、そっと公開する。

アクセス権エラー
あるファイルにアクセス権を設定した場合、CGIがそのファイルへのアクセス違反のエラーを発生する場合がある。CGI本体がゲストアクセス可能なディレクトリにあった場合、CGIプログラムはゲストの権限で動作し、ターゲットのディレクトリやファイルへのアクセスがはねられてしまうようなのだ。アクセス権が設定されているディレクトリ内のファイルを扱う場合、CGIも同じディレクトリにあれば良いようだ。NTにしてはセキュリティがちゃんとしていると思わなくも無いが、これは意外に面倒な足かせになる。ディレクトリ毎に別々のアクセス権を設定し、これらのファイルに対して同じCGIを使うとしても、各ディレクトリにCGIを置かねばならない。そして、これらのディレクトリは「アプリケーション実行」に設定するわけで、今度は「実行可能形式ファイルのダウンロード」ができなくなってくる。木目細かく対応するのなら、CGI使うよりもそれぞれにHTML形式のページを置いた方が簡単になる可能性が高いね。
CGIディレクトリの設定
CGIを格納したディレクトリはアプリケーション実行可能に設定しておかなきゃならない。当り前だ。実行可能になっていないと、CGIプログラムのダウンロードになってしまう。セキュリティを考えるなら、アプリケーション実行可能ディレクトリは、この「CGI」のみに限っておこう。では、このディレクトリを「書き換え可能」とするか否か。データをファイルに保存するためには書き換えの許可が必要だろうけれど、これによって「ファイルがアップロードされ、実行される」危険性が生じてくると考えるべきだ。CGIのディレクトリは実行可能で書き換え不可として、別途パラメータ保存用のディレクトリを準備して実行不可で書き換え可能とするのだな。(書き換えと実行の双方を可能にするのは自殺行為に近い)
CGI内での制限
CGI自体にセキュリティ機能を持たせることは推奨する。渡された環境変数でチェックするわけだ。どれかのパラメータに対しての「許可リスト」をテキストファイルで作っておき、CGI起動時にこれを読み込んでマッチングを確認するだけでもいいだろう。この「許可リスト」自体を見られるのは嬉しくはないけど、セキュリティ上はそんなに深刻でもないしね。
EXE拡張子
CGIプログラムの拡張子が「EXE」のままだと、サーバがNTであることがバレて、アタックを受ける危険性があるという話。一理あるような気もするし、気にし過ぎであるような気もする。拡張子が「CGI」になっている方がスマートに見えるから、変えておくのもいいかもしれない。(ここで「気にし過ぎ」としたのは、「危険性が無いから」ではなく、「どっちみち危険だから」と思ってのこと)