MVVM アーキテクチャ内での PasswordBox バインディングの保護
MVVM アプリケーションで PasswordBox
を直接バインドすると、重大なセキュリティ リスクが生じます。 この記事では、パスワード暗号化を保護しながら MVVM 原則を維持する安全なカスタム バインディング ソリューションについて概要を説明します。
ViewModel の実装: 安全なアプローチ
ViewModel 内に書き込み専用の SecureString
プロパティを実装します。
<code class="language-csharp">public SecureString SecurePassword { private get; set; }</code>
実装の表示: イベント処理
XAML で PasswordChanged
に PasswordBox
イベント ハンドラーを追加します。
<code class="language-xml"><PasswordBox PasswordChanged="PasswordBox_PasswordChanged" /></code>
分離コード: 安全なバインディング ロジック
分離コードは、PasswordBox
と SecureString
プロパティ間のバインディングを処理します。
<code class="language-csharp">private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e) { if (this.DataContext != null) { ((dynamic)this.DataContext).SecurePassword = ((PasswordBox)sender).SecurePassword; } }</code>
代替: クリアテキストバインディング (使用には注意してください!)
パスワード テキストのクリアが許容される場合 (セキュリティ上の理由から通常は推奨されませんが)、Password
の代わりに SecurePassword
プロパティを利用できます。
ViewModel プロパティ (クリアテキスト):
<code class="language-csharp">public string Password { private get; set; }</code>
分離コード バインディング (クリア テキスト):
<code class="language-csharp">private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e) { if (this.DataContext != null) { ((dynamic)this.DataContext).Password = ((PasswordBox)sender).Password; } }</code>
重要なセキュリティ上の注意: このクリア テキスト方式ではバインドが簡素化されますが、パスワードがプレーン テキストで公開されます。 セキュリティを最適化するために、SecureString
を使用することを強くお勧めします。
このカスタム バインド方法により、セキュリティのベスト プラクティスに沿って、クリーンな MVVM アーキテクチャが維持され、プロセス全体を通じてパスワードが暗号化されたままになります。 堅牢なパスワード保護のため、SecureString
アプローチを優先してください。
以上がPasswordBox を MVVM ViewModel に安全にバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。