インターネット機密保護は、 ファイアウォール・テクノロジー、オペレーティング・システム機能、Web サーバー機能、Net.Data メカニズム、 およびデータ・ソースの一部であるアクセス制御メカニズムの組み合わせで提供されます。
ユーザーの資産には、機密保護の適切なレベルを決定する必要があります。 本章では、ユーザー資産を保護するために使用できるメソッドを説明し、 Web サイトの機密保護のプランをたてるために使用できるその他のリソースのリファレンスも提供します。
以下の節には、ユーザーの資産保護のガイドラインが含まれています。 ここで解説する機密保護のメカニズムは、次のとおりです。
さらに、Net.Data ではデータベース・クライエット・パスワードの暗号化を提供します。 詳しくはクライエットの構成を参照してください。
ファイアウォール は、ハードウェア、ソフトウェア、 および、ネットワーク環境のリソースへのアクセスを制限するように設計されたポリシーのコレクションです。
ファイアウォールは、
Net.Data は、 ユーザーの環境で実行する、 ファイアウォール製品 と組み合わせて使用されます。
以下の構成が、Net.Data アプリケーションの機密保護の推奨される管理方法です。 これらの構成情報は高水準なもので、 パブリック・インターネットからユーザーのセキュア・イントラネットを分離するファイアウォールが、 構成されていることを前提としています。 組織のセキュリティー・ポリシーと合わせて、これらの構成を注意深く考慮してください。
この構成は、セキュア・イントラネットとパブリック・インターネットの両方から、 Net.Data および Web サーバーを分離する、サブネットワークを作成します。 このファイアウォール・ソフトウェアは、 Web サーバーとパブリック・インターネット間のファイアウォール、および、 Web サーバーとセキュア・イントラネット間のもう 1 つのファイアウォールを、 作成するために使用されます。ここには、DB2 サーバーが含まれます。 この構成を、図 15 に示します。
この構成をセットアップするには、以下のようにします。
この構成では、ファイアウォール・ソフトウェアは、パブリック・インターネットから、 DB2 サーバーを使用するセキュア・イントラネットを分離します。 Net.Data および Web サーバーは、 ファイアウォール以外はワークステーション・プラットフォーム上にあります。 この構成は、最初の構成より単純ですが、それでもデータベースの保護が可能です。 図 16 は、この構成を示しています。
Web サーバーに CAE をインストールして、 Net.Data が DB2 サーバーと通信することができるようにする必要があります。ファイアウォールは、DB2 クライアント要求が Net.Data から DB2 に流れ、 確認パケットが DB2 から Net.Data に流れるように構成しなければなりません。
この構成では、DB2 サーバーおよび Net.Data は、 ファイアウォールおよびセキュア・イントラネットの外側にインストールされます。 これらの DB2 サーバーおよび Net.Data は、外部ハッキングからは保護されません。 ファイアウォールには、この構成ではパケット・フィルター規則は必要ありません。 図 17 は、この構成を示しています。
Secured Sockets Layer (SSL) をサポートする Web サーバーを使用しているときに、 クライアント・システムと Web サーバー間で送信されるすべてのデータを暗号化できます。 この機密保護の基準は、ログイン ID 、パスワード、 およびクライアント・システムから Web サーバーに HTML フォームで転送されるすべてのデータと、 Web サーバーからクライアント・システムに送信されるすべてのデータの、 暗号化をサポートしています。 ほとんどの Web サーバーは、Internet Connection Secure Server、 バージョン 2 リリース 2 以降のバージョン、 および Lotus Domino Go Webserver、4.6.1 以降のバージョンなどの SSL を、 サポートしています。
認証は、Net.Data 要求を作成するユーザー ID が、 アプリケーション内のデータをアクセスし、更新する許可を持っているということを、 確認するために使用されます。 認証は、ユーザー ID とパスワードをマッチングする処理で、 要求が有効なユーザー ID から発行されたものかどうかの妥当性検査を行います。 Web サーバーは、サーバーが処理するそれぞれの Net.Data 要求と、 ユーザー ID を関連付けます。 次に、その要求を処理しているプロセスまたはスレッドは、 ユーザー ID が許可されているすべてのリソースにアクセスすることができます。
次の 2 つのタイプの認証を使用することができます。 1 つはサーバーの特定のディレクトリーの保護で、もう1 つはデータベースの保護です。
ヒント: | Net.Data マクロを保護するには、以下のようにします。
|
許可によって、ユーザーに、オブジェクト、資源、 および関数への完全なアクセス権または制限付きアクセス権が与えられます。 DB2 のようなデータ・ソースは、 独自に許可のメカニズムを備えていて、データ・ソースが管理する情報を保護しています。 このような許可のメカニズムは、 Net.Data 要求を実行しているプロセスに関連付けられているユーザー ID が、 認証を使用するで説明されているように正しく認証されていることを前提にしています。 これらのデータ・ソースに対する既存のアクセス制御メカニズムは、次に、 認証されたユーザー ID によって保持されている認証に基づいて、 アクセスを許可または拒否します。
上記で説明したメソッドに加えて、Net.Data 構成変数またはマクロ開発技法を使用して、 エンド・ユーザーの活動を制限し、データベースの設計など共通の資産を隠し、 実稼働環境のユーザーが指定した入力データの値の妥当性検査を行うことができます。
Net.Data は、エンド・ユーザーの活動を制限したり、 あるいはデータベースの設計を隠したりするために使用できる、 いくつかの構成変数を提供します。
また、許可を使用するで説明されている許可検査を使用して、 マクロ開発技法で説明されているように、 INCLUDE ステートメントのファイル名が変更できないことを確認します。
以下のメソッドのいずれかを使用して、 実稼働環境の SQL ステートメントの表示を使用不可にすることができます。
SHOWSQL Net.Data 変数の構文および例については、 Net.Data 解説書 の変数の章の、SHOWSQL を参照してください。
直接要求によってユーザーは非常に多くの関数を実行することができるため、 直接要求の使用を許可するかどうかは細心の注意が必要です。 このメソッドの起動を使用可能にするときには、 Net.Data 要求を処理する際に使用されるユーザー ID が、 適切な許可レベルを持っていることを確認します。
DTW_DIRECT_REQUEST 構成変数を使用して、直接要求を使用不可にすることができます。 構文および追加情報については、DTW_DIRECT_REQUEST: 直接要求変数を使用可能にするを参照してください。
Net.Data は、ユーザーが入力変数に値を指定できるようにするための、 いくつかのメカニズムを提供します。 マクロが意図された方法で実行していることを確認するには、 そのマクロがこれらの入力変数を妥当性検査する必要があります。 また、ユーザーのデータベースおよびアプリケーションは、 ユーザーが読み込みを許可されているデータへのアクセスに、 アクセスを制限するような設計も行う必要があります。
Net.Data マクロをコーディングするときには、以下の開発技法を使用します。 これらの技法は、アプリケーションを目的どおりに実行し、 データへのアクセスを正式に許可されたユーザーだけに確実に制限するために役立ちます。
例 : Net.Data SHOWSQL 変数の設定は、 %DEFINE SHOWSQL="NO" を使用せずに、 @DTW_ASSIGN(SHOWSQL,"NO") を使用して行います。 また、SHOWSQL=YES などの照会ストリング割り当ては、 マクロ設定をオーバーライドしません。
以下のメソッドのいずれかを使用して、 実稼働環境の SQL ステートメントの表示を使用不可にすることができます。
SHOWSQL Net.Data 変数の構文および例については、 Net.Data 解説書 の変数の章の、SHOWSQL を参照してください。
また、DTW_ASSIGN を使用して、 RPT_MAX_ROWS または START_ROW_NUM などの他の Net.Data 変数が、 オーバーライドされないようにすることもできます。 これらの変数についての詳細は、Net.Data 解説書 の変数の章を参照してください。
マクロ内の SQL ステートメントに Net.Data 変数を追加することによって、 ユーザーは、SQL ステートメントを実行する前に、 その SQL ステートメントを動的に変更することができます。 ユーザーが指定した入力値の妥当性検査、 および変数リファレンスを含んでいる SQL ステートメントの、 予期しない方法による変更の防止は、マクロ開発者が行う必要があります。 ユーザーの Net.Data アプリケーションは、 URL でユーザーが指定した入力値の妥当性検査を行います。 これによって、Net.Data アプリケーションは無効な入力を拒否できます。 検証設計プロセスは、以下のステップを行う必要があります。
例 1: SQL ステートメントを検査するために、 DTW_POS() ストリング関数を使用する
%FUNCTION(DTW_SQL) query1() { select * from shopper where shlogid = '$(shlogid)' %}
shlogid 変数の値が shopper ID になるようにします。 この目的は、SELECT ステートメントから戻される行を、 shopper ID が識別された shopper に関する情報を含む行だけに、制限することです。 ただし、ストリング "smith' または shlogid<>'smith" が、 変数 shlogid の値として渡された場合は、照会は以下のようになります。
select * from shopper where shlogid = 'smith' or shlogid<>'smith'
オリジナル SQL SELECT ステートメントを変更したこのユーザー・バージョンは、 shopper テーブル全体を戻します。
Net.Data ストリング関数は、 ユーザーが不適切な方法で SQL ステートメントを変更していないことを確認するために、 使用することができます。 たとえば、以下のロジックは、shlogid 変数と関連付けられた入力値が、 単一の shopper ID からなることを確認するために使用することができます。
@DTW_POS(" ", $(shlogid), result) %IF (result == "0") @query1() %ELSE %{ perform some sort of error processing %} %ENDIF
例 2: DTW_TRANSLATE() を使用する
ユーザーのアプリケーションが、 入力変数 number_of_orders で指定された値が整数かどうかを検査する必要があるとします。 これを行う方法の 1 つは、 数字 0-9 を除くすべてのキーボード文字を含む変換テーブル、 input_translation_table を作成し、 DTW_TRANSLATE および DTW_POS ストリング関数を使用して、 その入力の妥当性検査を行うことです。
@DTW_TRANSLATE(number_of_orders, "x", input_translation_table, "x", string_out) @DTW_POS("x", string_out, result) %IF (result = "0") %{ continue with normal processing %} %ELSE %{ perform some sort of error processing %} %ENDIF
ストアード・プロシージャー内の SQL ステートメントは、 Web ブラウザーからユーザーが修正できないこと、 およびユーザー提供の入力パラメーター値は、 入力パラメーターと関連付けられた SQL データ型によって制約されないことに、 注意してください。 Net.Data ストリング関数を使用して、 ユーザーの入力値の妥当性検査を行うことができない状態では、 ストアード・プロシージャーを使用することができます。
例: filename="../../x" のような照会ストリング割り当てによって、 INCLUDE_PATH 構成ステートメントで通常指定されないディレクトリーから、 ファイルはインクルードされます。 Net.Data 初期設定ファイルは、以下のパス構成ステートメントを含んでいるとします。
INCLUDE_PATH /usr/lpp/netdata/include
また Net.Data マクロは、以下の INCLUDE ステートメントを含んでいるとします。
%INCLUDE "$(filename)"
filename="../../x" の照会ストリング割り当ては、 ファイル /usr/lpp/x をインクルードします。 このファイルは、INCLUDE_PATH 構成ステートメント指定ではインクルードされません。
Net.Data ストリング関数は、 指定されたファイル名がそのアプリケーションに適切であることを検証するために、 使用することができます。 たとえば、以下のロジックを使用して、ファイル名の変数と関連付けられた入力値に、 ストリング ".." が含まれないことが確認できます。
@DTW_POS("..", $(filename), result) %IF (result > "0") %{ perform some sort of error processing %} %ELSE %{ continue with normal processing %} %ENDIF
例 : 以下の SQL ステートメントは、 変数 order_rn で識別された順序に関する順序情報を戻します。
select setsstatcode, setsfailtype, mestname from merchant, setstatus where merfnbr = setsmenbr and setsornbr = $(order_rn)
このメソッドは、ブラウザーのユーザーが、ランダムな順番を指定して、 可能であれば、他の顧客の順序に関する機密情報を取得することを許可します。 この種の公開タイプにおける保護の方法としては、以下のような変更をする方法があります。
たとえば、shlogid が順序と関連付けられた顧客 ID を含む列で、 SESSION_ID がブラウザーのユーザーの認証された ID を含む Net.Data 変数である場合、 以下のステートメントで直前の SELECT ステートメントを置き換えることができます。
select setsstatcode, setsfailtype, mestname from merchant, setstatus where merfnbr = setsmenbr and setsornbr = $(order_rn) and shlogid = $(SESSION_ID)
資産の保護に関する詳細な情報は、以下の Web サイトの、 インターネット機密保護に関する頻繁に問い合わせのある質問リスト (FAQ) を参照してください。
http://www.w3.org/Security/Faq