GeneXus Access Manager (GAM) を使用しない
ナレッジベースの一般的なシナリオは、
マスターページの Start イベントに、ユーザーによる Web ページの実行が認証またはオーソライズされているかどうかを検証するコードを含めることです。そのため、ユーザーイベントの実行にはセキュリティチェックが含まれていませんでした。これは、ユーザーイベントが、セキュリティチェックが既に行われた Start イベントの必ず後に実行されたためです。
しかし、
スムース Web UX を使用するように生成されたアプリケーションの場合は、
イベント実行スキームのため、Start イベントにセキュリティチェックをプログラミングするのは適切な方法ではありません。この場合、別の方法を検討する必要があります。
GAM を使用する方がこの問題の最適な解決方法ですが、GeneXus では自動的なセキュリティ手段を導入しました。これにより、ナレッジベースで
統合セキュリティが有効化されていない場合でも、GeneXus Evolution 3 より前のバージョンからスムースモデルに変換することができます。
ケースシナリオ:
[ Web User Experience ] プロパティ = Smooth
[ Integrated Security Level ] プロパティ = None
[ Web User Experience ] プロパティが Smooth に設定されている場合、Start、Refresh、および Load の各イベントは、
イベント実行スキームで説明しているように、ユーザーイベントの実行によってトリガーされません。
つまり、次のコードにはセキュリティ上の脆弱性があります:
Event Start
&context = LoadContext()
if (not &context.IsAdministrator)
NotAuthorized.Link()
endif
Endevent
Event 'RemoveData'
RemoveData.call()
Endevent
スムースモデルでは、ユーザーイベント RemoveData が Start イベントから切り離されて実行されます。そのため、Start イベント内のセキュリティチェックは、ユーザーイベントの実行によってトリガーされません。
セキュリティチェックが各ユーザーイベントに含まれていれば、問題は発生しませんが、ユーザーイベントのコードを変更する必要はありません。自動的な解決方法で、このようなセキュリティ問題を解決できます。
GeneXus 開発者がこの作業をしなくても済むように、一度も Web ページ (Start イベント) にアクセスせずに侵入者がユーザーイベントを実行することを自動的に回避する手段が実装されました。Start イベント (Get メソッド) を実行する必要があるのは、通常は承認コード (GAM を使用しない場合) がここでチェックされるからです。
ユーザーが Web パネル (GET メソッド) を一度実行した場合のみ、ページのユーザーイベントを実行する際に使用するトークンが付与されます。ユーザーが Web ページの GET メソッドを実行しない場合、すべての HTTP リクエストでトークンが必須であるため、ユーザーイベントは実行できません。トークンは、その特定の Web ページオブジェクトに対してのみ有効です。
GeneXus 15 以降、高度な暗号技術を使用したトークンメカニズムの実装には
JWT 標準が使用されます。
また、読み取り専用データが変更されていないかどうかを検出するため、各 HTTP Post 用の自動セキュリティチェックも使用可能です。変更されている場合は、403 Forbidden Error が通知されます。このメカニズムの詳しい説明については、「
Web 開発のセキュリティに関するヒント」を参照してください。
注: エンドユーザーが Web ページを実行している間は、そのユーザーの権限が破棄されたり、ユーザー自身が削除されたりしても、セキュリティトークンは有効なままです。そのため、アプリケーションの重要度や特性によっては、各ユーザーイベントに対するセキュリティチェックのプログラミングが必要になる場合があります。