|
6.3 動的なコンテンツを実現するための技術と留意点
|
||
| 前のページへ | ||
SSIやCGIなどの動的コンテンツを生成する機能をWebサーバーに組み込む場合、SSIやCGIの実行機能は必要最低限にする。特に、SSIからCGIや外部プログラムを実行するexec機能の取り扱いには注意が必要である。
SSIやCGIスクリプトの管理は、スクリプト保存用のディレクトリを作成し、すべてのスクリプトをそのディレクトリで一括管理する。ただし、SSIに関してはサイト運用上、この方針に適合しないことがある。
専用ディレクトリは、ドキュメント(通常コンテンツ)のルートディレクトリ配下とは異なる場所に作成し、Webブラウズから参照されないような設定にする(注1)。
| (注1) | SSIやCGIスクリプトを特定ディレクトリで管理すること自体は、セキュリティの向上というよりも、管理者による管理ミス削減を目的とした行為である。 |
スクリプト保管用のディレクトリやSSI、CGIスクリプトには、実行に必要な最低限のパーミッションしか与えない。特に一般ユーザに対する書き込み権限は対象ディレクトリ、ファイル共に与えないようにする。
スクリプト保存用ディレクトリのパーミッションは、Table 6.1のように設定する。IISでWebサーバーを提供している場合は、さらに「インターネット インフォメーション サービス」でスクリプトの権限を設定する必要がある。Fig. 6.1は、スクリプトの権限を設定するためのダイアログボックスである。
Table 6.1 スクリプト保存用ディレクトリのパーミッション
| 環境 | ユーザ/グループ | パーミッション | 対象ディレクトリ例 |
| Apache for Solaris |
www/www | 744または755(注2) | cgi-bin |
| IIS for Windows | Administrators | フルコントロール | scripts |
| SYSTEM | フルコントロール | ||
| Authenticated Users | 読み取りと実行 |
| (注2) | CGIやSSIで、execコマンドを利用してCGIや外部コマンドを実行する場合、パーミッションは755。外部コマンドやCGIを実行しない場合のSSIスクリプト用ディレクトリであれば、パーミッションは744。 |
Fig. 6.1 IISの実行アクセス権設定画面
設定値は、以下のようになる。
「なし」: 静的コンテンツ
「スクリプトのみ」: SSI(コマンド実行なし)
「スクリプトおよび実行可能ファイル」: SSI(コマンド実行あり)、CGI
パーミッションの管理は、保存するディレクトリで管理することが望ましいが、スクリプト単位でパーミッションを与える場合、Table 6.2のように設定する。
Table 6.2 スクリプトのパーミッション
| 環境 | SSIスクリプト | CGIスクリプト |
| Apache for Solaris |
744または755(注3) | 755 |
| IIS for Windows | Administrators/フルコントロール | |
| SYSTEM/フルコントロール | ||
| Authenticated Users/読み取りと実行 | ||
| (注3) | SSIで、execコマンドを利用してCGIや外部コマンドを実行する場合、パーミッションは755。外部コマンドやCGIを実行しない場合のSSIスクリプト用ディレクトリであれば、パーミッションは744。 |
システム関数から、入力データを外部コマンドのパラメータ値として渡すことができる場合、入力データに悪意あるコマンドを含み、システム関数から実行されてしまう危険性があるため、システム関数の使用方法には注意が必要である。
悪意あるユーザは、メタキャラクタやHTMLタグ、過大データなどを利用してCGIを通じた不正行為を行うことがあるので、CGI内で入力値を処理する際は、入力値にこのような値が含まれているか、入力値の上限は超えていないかをチェックする必要がある。
入力値に不正な文字列や文字列長が過大である場合は、入力値を整形し処理を実行するよりも、フェイルセーフの方針から、例外処理として取り扱う方が望ましい。
参考資料
情報処理振興事業協会 セキュリティセンター(IPA/ISEC)
「セキュア・プログラミング講座」:
http://www.ipa.go.jp/security/awareness/vendor/programming/index.html
クライアントからWebサーバーへデータを送信するには、GETメソッドではなくPOSTメソッドを使用して、送信データをstdin(標準入力)として扱い、URLに送信データ情報を含まないようにするべきである。GETメソッドをデータ送信に利用すると、対象スクリプトへの送信データを自由に指定することが可能である。例えば、下記の例のように、重要な情報がURLの一部として表示される場合、UserIDへのデータを変更しURLに直接指定することで、なりすましによる不正アクセスの危険性がある。
| GETメソッドを利用した場合のURL: | |||
| http://www.ipa.go.jp/login.cgi?UserID=0001 |
|||
| Webサーバーへ送信するデータは、UserIDが0001であることが推測でき、悪意あるユーザは、0002、0003といった値を指定し、不正行為を試みる | |||
| POSTメソッドを利用した場合のURL: | |||
| http://www.ipa.go.jp/login.cgi |
|||
| Webサーバーへのデータは、URLではなく標準入力データとして送信される | |||
Webサーバーへのデータ受け渡しに、hiddenフィールドを利用することができるが、hiddenフィールドは、WWWブラウザに表示されないだけで、決して隠されたフィールドではない。そのため、ユーザID/パスワードなどの重要なデータやり取りにこのフィールドを使用すべきではない。Webページのソースを表示するとhiddenフィールドの内容は誰にでも参照できてしまい、さらにその内容を偽証することも可能である。そのため、このフィールドで重要データのやり取りは行うべきでない。
CookieにユーザID/パスワードなどの重要データを保存し、そのデータをWebサーバーに送信するような場合、Cookie情報が漏洩してしまうと、なりすましによる不正行為の危険性があるので、Cookieに含める機密情報やCookieの管理には注意が必要である。Cookieに収める情報は、セッションIDのみが望ましい。
CGIへ重要な情報を送信する際は、データまたは通信の暗号化を行い、情報漏洩が発生した場合でも、通信内容の解析が容易に行えないようにすべきである。
ソフトウェアインストール時に導入されるサンプルファイル(サンプルプログラムやテストプログラム)やバックアップファイル、独自に開発したプログラムには、セキュリティホールが含まれている可能性があるので、運用上、不必要なファイルは削除するべきである。
運用上、Webサーバーでバックアップファイルを保管する場合、アクセス制御(Web参照が不可能なディレクトリで管理)を実施することで、許可されたユーザのみが参照できるような設定を行う。
| 動的コンテンツ |
第6章の目次
|
セッション管理
|
Copyright © 2002 Information-technology Promotion Agency, Japan. All rights reserved.