2

パスワードボックスのバインドの問題に遭遇しました。私のアプリケーションは MVVM に従います。パスワード ボックス バインディングの問題を解決する方法を見つけるために Google を検索しようとしたところ、2 種類の解決策が見つかりました - 1> 添付プロパティの使用 2> 安全な文字列の使用/?tag=mvvm )。2 番目のオプションの方が安全に思えたので、このオプションを選択する傾向がありました。しかし、後で、次のコードを使用して、安全な文字列内の実際の文字列を抽出できることがわかりました

IntPtr iPtr = Marshal.SecureStringToBSTR(securePassword);
// securePassword is of SecureString type

string str = Marshal.PtrToStringUni(iPtr);

今、私は少し混乱しています。次の問題を理解するのを手伝ってください。2> MVVM パターンに従っていて、同時にパスワード文字列を安全にしたい場合、上記の 2 つのうちどちらが適切なオプションですか。

4

1 に答える 1

1

安全な文字列の使用は、文字列の使用よりも本当に優れていますか

はいといいえ。SecureStringを使用すると、秘密の文字列をメモリに保持する方法を選択できます。これらは、機密情報を探してアプリケーションのメモリの内容を調べるデバッガーを使用していたずらを防止するのに役立ちます。また、通常の文字列よりも破棄に関して優れた保証を提供します。しかし、それらは使用する PITA であり、現時点で実際に使用するフレームワークはほとんどないことも言わなければなりません。この以前のSOの回答は、その利点をよく示している可能性があります。

MVVM パターンに従っていると同時に、パスワード文字列を安全にしたい場合、上記の 2 つのうちどちらが適切なオプションですか

ある段階で、パスワードを使用する必要があります。SecureString の内容を取得するのは困難です。これは安全であることを意図しています。しかし、今後のログインを比較できるように、内容を取得してそのパスワードをデータベースに保存するにはどうすればよいでしょうか? 答えは、SecureString はこの問題を解決しないということです。実際の文字列をソルトしてハッシュして保存する前に、実際の文字列を抽出する必要があります。入力されているパスワードが X509Certificate2 を作成するためのものであり、それを保存しない場合は、SecureString を使用してください。

したがって、答えは....
文字列の内容に自分でアクセスする必要がある場合は通常の文字列を使用し、フレームワーク メソッドまたは API 関数が必要とする場合はセキュリティで保護された文字列を使用します。

つまり、UI で PasswordBox を使用する場合は、暗号化されていないコンテンツにアクセスして、保存するか、以前に保存したエントリと比較できるようにする必要があります。

于 2013-03-09T04:27:32.177 に答える