2012-03-06 10 views
2

私は、ユーザー名、パスワード、電子メールなどのような機密データを扱うWPFアプリケーションを作成しています。これらのデータはすべて、アプリケーションのテキストボックスとパスワードボックスに表示されます。アプリケーションが終了すると、メモリ内にあったすべてのデータが削除されるだけで、誰も後でそれを取得できないようにする必要があります。WPFアプリケーションのセキュリティ上の問題

私が注意しなければならないもの、またはこのプロジェクトをできるだけ安全にするために使用できるテクニックに関するガイドラインやヒントを教えてもらえますか?

は、プログラムの実行が終了した後、あなたが

+0

最初にデータはどのようにメモリに取り込まれましたか?実行可能ファイルが終了すると、そのメモリは解放されます。クリップボードにデータがありますか?あなたはディスクにメモリを書きますか?あなたはキーキャプチャを心配していますか?あなたの懸念事項は何ですか? –

+0

タイマーでクリップボードをクリアしていて、ディスクにデータが書き込まれていないことは問題ではありません。しかし、私はどこかでテキストボックスに存在するデータがメモリに残っていると読んでいます。 – Aaron

+1

@mitte:アプリケーションが実行されている間だけ... –

答えて

3

データがメモリに残っていないだろうありがとうございますが、プログラムの実行中に、理論的には、それを読み取ることができました。あなたはSecureString Sを使用して試みることができる:http://msdn.microsoft.com/en-us/library/system.security.securestring.aspx

はまた、PasswordBox制御は、すでにSecureStringを使用していますので、あなたは、その部分にもいいです。

-1

.Net文字列は不変であり、中止されています。 不変性により、文字列が作成された後は変更できなくなります。 インターンは、CLRに同じ内容の文字列のインスタンスを1つ使用させます。 また、文字列を取り除くのが難しくなります。共通言語ランタイム(CLR)が終了するまで

..インターンStringオブジェクトに割り当てられたメモリMSDNからそう が解放されていません。 の理由は、アプリケーションの後、またはアプリケーションドメインの後でさえも、 が終了すると、内部のStringオブジェクトへのCLRの参照が になる可能性があります。

SecureStringを使用することもできますが、多くのWPFコントロールではPasswordBox以外のコントロールをサポートしていないため、あまり便利ではありません。

たとえば、ユーザーにパスワードを表示する必要がある場合がありますが、SecureStringを通常の文字列に戻すことはできません。これは不可能です。これにより、軽減するために設定した問題が戻されます。

私の意見では、WPF/C#は機密データを持つアプリケーションのための良い候補言語フレームワークではありません。

+0

なぜあなたはdownvotedを説明してください。そうすれば誰もが何かを学ぶことができます。 – Indy9000

1

私はあなたが心配する価値がないことを心配していると思います。

誰かがマシンに物理的にアクセスして機密情報を盗もうとしている場合、すでにゲームを失ってしまっています。

ユーザー名とパスワードは現在メモリに格納されていない可能性がありますが、キーロガーをインストールして次回アプリケーションを起動するだけで済みます。

関連する問題