最近のアクセス:
GAM を使用した安全な開発のための推奨事項

アプリケーションのいくつかの側面を開発する際に、一般的な問題を回避し、最も安全な方法で開発するための推奨事項を示します。「GeneXus システムとデプロイメントの GAM によるセキュリティ強化」もお読みください。

再認証

アプリケーションの各側面には、ビジネスルールやロジックに基づいて、それぞれ慎重に扱うべき操作があります。GAM をアクティベートすると、再認証を実装して、実行しているユーザーがログインしているユーザーであり、なりすましではないことを確認できます。
ユーザーにプロンプトを表示するか、ユーザーを別のパネルにリダイレクトして、資格情報を再入力するようにすることで、操作へのアクセスをコントロールできます。このパネルのロジックでは、外部オブジェクトである GAMRepository の Login() 関数を使用します。付加パラメーターは isBatch です:
&GAMLoginAdditionalParameters.isBatch = True
//ログインユーザー
&LoginOK = GAMRepository.Login(&UserName, &UserPassword, &GAMLoginAdditionalParameters, &Errors)
If not &LoginOK
    //エラー処理
EndIf
エラーが発生した場合は、保護対象の操作へのリダイレクトを続行しません。その操作が実行されるプロシージャー内で検証が行われた場合は、即座に戻ります。
詳細の参照先: GAM の Login メソッド

GAM イベントのサブスクリプション

GAM イベントのサブスクリプションは、GAM イベントの発生後に追加の外部コードを実行できるようにすることを目的とします。つまり、GAM 自体の内部処理の後に実行される、カスタマイズされたイベント処理です。たとえば、ユーザーやロールの追加/削除/変更などのイベントです。
これは、ユーザーがプロファイルに加える変更が許可されない変更である可能性がある場合に、ユーザーにアラートする場合に特に重要です。開発者は、GAM で指定される入力パラメーターと出力パラメーターに適合するプロシージャーを実装し、そのロジックに従って、データの更新について使用可能な手段 (通常は E メール) でユーザーにアラートする必要があります。
プロシージャーのパラメータールールは次のようになります:
Parm(in:&EventName, in:&jsonIN, out:&jsonOUT);

次に、プロシージャーコードで、GAMUser タイプの変数を &jsonIN パラメーターからロードできます。これは、サブスクライブする対応イベントが User_Update であるためです。そこから、アラートの送信先となるユーザーの E メールアドレスを取得できます。これは無効なアラームで、ユーザーは無視できます。
GeneXus プログラムイベントのサブスクリプションを記録するには、Web バックオフィスまたは GAM API を使用できます。
詳細の参照先: GAM イベントのサブスクリプション

ファイルへのアクセス

ファイルが、ユーザーがコントロールするデータとは無関係にアプリケーションによって生成されたものではなく、デプロイメント時から存在していたものでもない場合、信頼できないファイルと見なされます。画像、Excel スプレッドシート、PDF ドキュメントなど、ユーザーが提供したファイルをアップロードする機能が、予期しないファイルタイプのアップロードに使われることがあります。そのため、GeneXus コードで、許可されている拡張子を考慮して、厳密な検証を行う必要があります。また、すべてのファイルを、アプリケーションのルートディレクトリー以外の場所に置く必要があります。
既定では、アップロードされたファイルは、アクセス不可の PrivateTempStorage ディレクトリーに一時的に格納されます。その後の配置場所は、ロードロジックによって異なります。マルチメディアファイルの場合は、公的にアクセス可能な PublicTempStorage ディレクトリーに移動されることがよくあります。プログラムによって別の場所に格納する場合は、格納場所となるディレクトリーは分離され、制限されていることが非常に重要になります。
静的コンテンツへのアクセスは、次の点を考慮して、プログラムで実行することが理想的です。
  • サーバー ファイル システムに HTTP 経由ではアクセスできないようにします。
  • アクセス URL に可視パスが含まれないようにします。UUID (Universal Unique Identifier) などの複雑な識別子とファイルを関連付けて、プログラムで実際のパスを取得して処理できるようにします。
  • プログラムでコントロールすることにより、ユーザーが匿名ユーザーかシステムに登録されているユーザーか、アクセス許可の取得、アクセスが許可されているかどうかの確認ができます。
  • GeneXus の HTTPResponse オブジェクトを使用して静的ファイルを返します (ファイルの場所は変数にロード):
&HttpResponse.AddFile(&FileName)
  • Content-Type ヘッダーと MIME Type 値を追加してコンテンツのタイプを指定します。たとえば、PDF ドキュメントの場合は次のようになります:
&HttpResponse.AddHeader(“Content-Type”, “application/pdf”)
  • ファイルをダウンロードする必要がある場合は、次のヘッダーを含めてファイル名を指定します (ソースサーバー上の名前と一致している必要はありません):
&HttpResponse.AddHeader(“Content-Disposition”, “attachment;filename=” + &FileName)
  • 同様に、サーバーで自動的に追加されない場合は、X-Frame-Options または X-Content-Type-Options などのヘッダーを追加することも可能です (HTTP ヘッダーの設定に関する説明を参照)。
詳細の参照先:

統合認証レベル

ナレッジベースで GAM をアクティベートする場合、既定の統合認証レベルは「認証」です。これは、すべてのオブジェクトのアクセスコントロールを対象とし、事前認証なしではアクセスを許可しません。ただし、このレベルの統合認証ではロールベースのアクセスコントロールはできません。つまり、ユーザーは割り当てられたロールによってアクセスが制限されることはありません。
認証後にアクセス許可に基づいてアクセスをコントロールするには、オブジェクトに組み込まれたセキュリティレベルを「オーソライズ」に変更する必要があります。これにより、既定ですべてのロールへのアクセス許可が拒否され (管理者ロールを除く)、ロールごとにアクセス許可を明示的に設定する必要があります。このアクセス許可が対応するユーザーに割り当てられます。
アプリケーションのセキュリティを強化するために、統合認証レベルをナレッジベースのレベルで「オーソライズ」に設定することをお勧めします。これにより、特定のオブジェクトでプロパティが変更されていない限り、すべてのオブジェクトでこのレベルに設定されます (変更された場合は変更後の値が維持されます)。この方法のメリットは、オブジェクトが保護されない、またはユーザーのアクセス許可に基づいてアクセスがコントロールされない可能性が低くなることです。ただし、オブジェクトごとにアプリケーションロールのアクセス許可ポリシーを設定する労力がかかります。この労力を軽減するには、開発のできるだけ早い段階でこの手段を講じます。もう 1 つのメリットは、この作業を終えるまでに、ユーザー認証のみを必要とするオブジェクトと、公的にアクセス可能にする必要があるオブジェクトを理解できるようになることです。
詳細の参照先: [ Integrated Security Level ] プロパティ



サブページ
Created: 21/04/20 02:19 by Admin Last update: 23/04/24 18:09 by Admin
カテゴリ
Powered by GXwiki 3.0