IBM Books

管理およびプログラミングの手引き OS/2 版、Windows NT 版、Unix 版


ユーザー資産を保護する

インターネット機密保護は、 ファイアウォール・テクノロジー、オペレーティング・システム機能、Web サーバー機能、Net.Data メカニズム、 およびデータ・ソースの一部であるアクセス制御メカニズムの組み合わせで提供されます。

ユーザーの資産には、機密保護の適切なレベルを決定する必要があります。 本章では、ユーザー資産を保護するために使用できるメソッドを説明し、 Web サイトの機密保護のプランをたてるために使用できるその他のリソースのリファレンスも提供します。

以下の節には、ユーザーの資産保護のガイドラインが含まれています。 ここで解説する機密保護のメカニズムは、次のとおりです。

さらに、Net.Data ではデータベース・クライエット・パスワードの暗号化を提供します。 詳しくはクライエットの構成を参照してください。


ファイアウォールを使用する

ファイアウォール は、ハードウェア、ソフトウェア、 および、ネットワーク環境のリソースへのアクセスを制限するように設計されたポリシーのコレクションです。

ファイアウォールは、

Net.Data は、 ユーザーの環境で実行する、 ファイアウォール製品 と組み合わせて使用されます。

以下の構成が、Net.Data アプリケーションの機密保護の推奨される管理方法です。 これらの構成情報は高水準なもので、 パブリック・インターネットからユーザーのセキュア・イントラネットを分離するファイアウォールが、 構成されていることを前提としています。 組織のセキュリティー・ポリシーと合わせて、これらの構成を注意深く考慮してください。


ネットワーク上のユーザーのデータを暗号化する

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 マクロを保護するには、以下のようにします。

  1. Net.Data プログラム・オブジェクトの Web サーバー構成ファイルに、 保護ディレクティブを追加する。

  2. Net.Data が実行されるユーザー ID に、マクロ・ファイルへのアクセス権を与える。 アクセス権の授与に関する詳細については、Net.Data がアクセスするファイルへのアクセス権の授与を参照してください。

許可を使用する

許可によって、ユーザーに、オブジェクト、資源、 および関数への完全なアクセス権または制限付きアクセス権が与えられます。 DB2 のようなデータ・ソースは、 独自に許可のメカニズムを備えていて、データ・ソースが管理する情報を保護しています。 このような許可のメカニズムは、 Net.Data 要求を実行しているプロセスに関連付けられているユーザー ID が、 認証を使用するで説明されているように正しく認証されていることを前提にしています。 これらのデータ・ソースに対する既存のアクセス制御メカニズムは、次に、 認証されたユーザー ID によって保持されている認証に基づいて、 アクセスを許可または拒否します。


Net.Data のメカニズムを使用する

上記で説明したメソッドに加えて、Net.Data 構成変数またはマクロ開発技法を使用して、 エンド・ユーザーの活動を制限し、データベースの設計など共通の資産を隠し、 実稼働環境のユーザーが指定した入力データの値の妥当性検査を行うことができます。

Net.Data 構成変数

Net.Data は、エンド・ユーザーの活動を制限したり、 あるいはデータベースの設計を隠したりするために使用できる、 いくつかの構成変数を提供します。

パス・ステートメントでファイル・アクセスを制御する
Net.Data は、パス構成ステートメントの設定から、 Net.Data マクロが使用するファイルと実行可能プログラムのロケーションを判別します。 これらのパス・ステートメントは、マクロ・ファイル、実行可能ファイル、組み込みファイル、 またはその他のフラット・ファイルを見つけようとするとき、 Net.Data が検索する 1 つまたは複数のディレクトリーを示します。 このパス・ステートメントにディレクトリーを選択して組み込むことによって、 ブラウザーで明示的にユーザーがアクセスできるファイルを制御することができます。 パス・ステートメントの詳細については、Net.Data の構成を参照してください。

また、許可を使用するで説明されている許可検査を使用して、 マクロ開発技法で説明されているように、 INCLUDE ステートメントのファイル名が変更できないことを確認します。

実動システムの SHOWSQL を使用不可にする
SHOWSQL 変数によって、Net.Data 関数内に指定された SQL ステートメントを、 Net.Data が Web ブラウザーに表示するように指定できます。 この変数は、アプリケーション内の SQL の開発およびテストで主に使用され、 実動システムで使用するものではありません。

以下のメソッドのいずれかを使用して、 実稼働環境の SQL ステートメントの表示を使用不可にすることができます。

SHOWSQL Net.Data 変数の構文および例については、 Net.Data 解説書 の変数の章の、SHOWSQL を参照してください。

実稼働環境の直接要求を使用可能にすることが適切であるかどうかを考慮する
直接要求方式で Net.Data を起動することにより、ユーザーは、 SQL ステートメントや Perl、REXX、または C プログラムの実行を、 URL から直接指定することができます。 マクロ要求メソッドによって、ユーザーは、 1 つのマクロで定義または呼び出されたこれらの SQL ステートメントおよび関数だけを、 実行することができます。

直接要求によってユーザーは非常に多くの関数を実行することができるため、 直接要求の使用を許可するかどうかは細心の注意が必要です。 このメソッドの起動を使用可能にするときには、 Net.Data 要求を処理する際に使用されるユーザー ID が、 適切な許可レベルを持っていることを確認します。

DTW_DIRECT_REQUEST 構成変数を使用して、直接要求を使用不可にすることができます。 構文および追加情報については、DTW_DIRECT_REQUEST: 直接要求変数を使用可能にするを参照してください。

マクロ開発技法

Net.Data は、ユーザーが入力変数に値を指定できるようにするための、 いくつかのメカニズムを提供します。 マクロが意図された方法で実行していることを確認するには、 そのマクロがこれらの入力変数を妥当性検査する必要があります。 また、ユーザーのデータベースおよびアプリケーションは、 ユーザーが読み込みを許可されているデータへのアクセスに、 アクセスを制限するような設計も行う必要があります。

Net.Data マクロをコーディングするときには、以下の開発技法を使用します。 これらの技法は、アプリケーションを目的どおりに実行し、 データへのアクセスを正式に許可されたユーザーだけに確実に制限するために役立ちます。

Net.Data 変数を、ある URL でまったくオーバーライドできなくする
URL 内の Net.Data 変数のユーザー設定は、 マクロが変数の初期化に使用する DEFINE ステートメントの効果をオーバーライドします。 これによって、マクロを実行する方法が変わることがあります。 これを避けるためには、DTW_ASSIGN() 関数を使用して 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 ステートメントに対して、 ユーザー・アプリケーションの本来の振る舞いを変えてしまうような変更ができなくなっていることの、 妥当性検査をする

マクロ内の SQL ステートメントに Net.Data 変数を追加することによって、 ユーザーは、SQL ステートメントを実行する前に、 その SQL ステートメントを動的に変更することができます。 ユーザーが指定した入力値の妥当性検査、 および変数リファレンスを含んでいる SQL ステートメントの、 予期しない方法による変更の防止は、マクロ開発者が行う必要があります。 ユーザーの Net.Data アプリケーションは、 URL でユーザーが指定した入力値の妥当性検査を行います。 これによって、Net.Data アプリケーションは無効な入力を拒否できます。 検証設計プロセスは、以下のステップを行う必要があります。

  1. 入力された構文の有効性を識別します。たとえば、 顧客 ID は文字で始まり、英数字だけで構成されます。

  2. 入力の誤り、意図的な害のある入力、または、 Net.Data アプリケーションの内部資産にアクセスするために入力された入力データを取り込むことによって、 発生する可能性のある障害は何かを判別します。

  3. アプリケーションの要件に合う入力検査ステートメントを、マクロに組み込みます。 この検査は、入力データの構文およびその構文の使用方法によって異なります。 簡単な検査を行う場合には、入力データの無効な内容を検査するか、 入力データ・タイプの検査をする 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 ストリング関数を使用して、 ユーザーの入力値の妥当性検査を行うことができない状態では、 ストアード・プロシージャーを使用することができます。

INCLUDE ステートメントのファイル名に対して、 ユーザー・アプリケーションの本来の振る舞いを変えてしまうような変更をできなくする
Net.Data 変数を使用して INCLUDE ステートメントでファイル名の値を指定すると、 インクルードされるファイルは、INCLUDE ファイルが実行されるまで決定されません。 マクロ内でこの変数の値をセットして、さらに、 ユーザーがブラウザーでマクロが指定する値をオーバーライドできないようにする場合には、 DEFINE の代わりに DTW_ASSIGN を使用して変数の値を設定する必要があります。 ユーザーがブラウザーでファイル名の値を提供できるようにする場合には、 ユーザーのマクロは、提供された値の妥当性検査を行う必要があります。

例: 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 SELECT 要求が、いくつかの方法で限定されていない限り、 このアプローチによってすべての機密データを、 すべてのユーザーが Web ブラウザーで使用できるようになります。

例 : 以下の 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)

Net.Data 隠し変数を使用する
Web ブラウザーで HTML ソースを見ることがあるユーザーから、 Net.Data マクロのいろいろな特性を隠すために、 Net.Data 隠し変数を使用することができます。 たとえば、データベースの内部構造を隠すことができます。 隠し変数の詳細については、隠し変数を参照してください。

ユーザーからの検証情報を要求する
ユーザー提供の入力データを基に独自の保護体系を作成することができます。 たとえば、HTML フォームでユーザーに妥当性検査情報を要求し、 Net.Data マクロがデータベースから検索するデータを使用するか、 または Net.Data マクロで定義された関数から外部プログラムを呼び出すことによって、 この情報の妥当性検査を行うことができます。

資産の保護に関する詳細な情報は、以下の Web サイトの、 インターネット機密保護に関する頻繁に問い合わせのある質問リスト (FAQ) を参照してください。

http://www.w3.org/Security/Faq


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]