6.3 動的なコンテンツを実現するための技術と留意点
前のページへ
次のページへ

6.3.2 動的コンテンツを利用する際の留意点

1) Webサーバーの設定に関する注意点

SSIやCGIなどの動的コンテンツを生成する機能をWebサーバーに組み込む場合、SSIやCGIの実行機能は必要最低限にする。特に、SSIからCGIや外部プログラムを実行するexec機能の取り扱いには注意が必要である。

2) CGIの保存場所に関する注意点

ア) 専用ディレクトリで管理

SSIやCGIスクリプトの管理は、スクリプト保存用のディレクトリを作成し、すべてのスクリプトをそのディレクトリで一括管理する。ただし、SSIに関してはサイト運用上、この方針に適合しないことがある。

イ) ディレクトリの設置場所

専用ディレクトリは、ドキュメント(通常コンテンツ)のルートディレクトリ配下とは異なる場所に作成し、Webブラウズから参照されないような設定にする(注1)

  (注1) SSIやCGIスクリプトを特定ディレクトリで管理すること自体は、セキュリティの向上というよりも、管理者による管理ミス削減を目的とした行為である。  

3) パーミッションの注意点

スクリプト保管用のディレクトリや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。  

4) CGI作成の留意点

ア) システム関数を不用意に使用しない

システム関数から、入力データを外部コマンドのパラメータ値として渡すことができる場合、入力データに悪意あるコマンドを含み、システム関数から実行されてしまう危険性があるため、システム関数の使用方法には注意が必要である。

イ) 入力値チェックを必ず行う

悪意あるユーザは、メタキャラクタやHTMLタグ、過大データなどを利用してCGIを通じた不正行為を行うことがあるので、CGI内で入力値を処理する際は、入力値にこのような値が含まれているか、入力値の上限は超えていないかをチェックする必要がある。

ウ) 例外処理

入力値に不正な文字列や文字列長が過大である場合は、入力値を整形し処理を実行するよりも、フェイルセーフの方針から、例外処理として取り扱う方が望ましい。

  参考資料
   情報処理振興事業協会 セキュリティセンター(IPA/ISEC)
   「セキュア・プログラミング講座」:
     http://www.ipa.go.jp/security/awareness/vendor/programming/index.html

5) CGIへのデータ送信の留意点

ア) GETとPOSTメソッドを使ったデータ送信

クライアントから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ではなく標準入力データとして送信される

イ) hiddenフィールドを使ったデータ送信

Webサーバーへのデータ受け渡しに、hiddenフィールドを利用することができるが、hiddenフィールドは、WWWブラウザに表示されないだけで、決して隠されたフィールドではない。そのため、ユーザID/パスワードなどの重要なデータやり取りにこのフィールドを使用すべきではない。Webページのソースを表示するとhiddenフィールドの内容は誰にでも参照できてしまい、さらにその内容を偽証することも可能である。そのため、このフィールドで重要データのやり取りは行うべきでない。

ウ) Cookieを使ったデータ送信

CookieにユーザID/パスワードなどの重要データを保存し、そのデータをWebサーバーに送信するような場合、Cookie情報が漏洩してしまうと、なりすましによる不正行為の危険性があるので、Cookieに含める機密情報やCookieの管理には注意が必要である。Cookieに収める情報は、セッションIDのみが望ましい。

エ) 通信の暗号化

CGIへ重要な情報を送信する際は、データまたは通信の暗号化を行い、情報漏洩が発生した場合でも、通信内容の解析が容易に行えないようにすべきである。

6) サンプル、バックアップファイルの取り扱い

ア) 不必要なファイルは削除する

ソフトウェアインストール時に導入されるサンプルファイル(サンプルプログラムやテストプログラム)やバックアップファイル、独自に開発したプログラムには、セキュリティホールが含まれている可能性があるので、運用上、不必要なファイルは削除するべきである。

イ) バックアップファイルの保管場所

運用上、Webサーバーでバックアップファイルを保管する場合、アクセス制御(Web参照が不可能なディレクトリで管理)を実施することで、許可されたユーザのみが参照できるような設定を行う。

 

前のページへ
目次へ
次のページへ
動的コンテンツ
第6章の目次
セッション管理


Copyright ©   2002 Information-technology Promotion Agency, Japan.  All rights  reserved.