私はC#ライブラリとそれを使用するWPFアプリケーションを試してみました。平文の文字列パスワードをSecureString
に置き換えようとしています。私はSecureString
を他のライブラリ/ Webサービスとやりとりするためのいくつかの場所で通常の文字列に変換し直す必要がありますが、それを行う量を最小限に抑えたいと思っています。私はまたそれを正しく行う方法についてthis articleに従おうとしています。どのような文字列が自分のコードからメモリ内に浮かんでいるかを監視する簡単な方法はありますか?どのくらいの弱点があるのかを知りたいのですが、言い換えれば、機密データがメモリ上のプレーンテキストにあるという点では私のコードにあります。私のWPFアプリケーションとC#ライブラリから機密データを読み取る
3
A
答えて
2
あなたが確認できることの1つは、プレーンテキストのパスワードがライブラリーによって維持されている場合、弱い参照を追加してそれが消えるまでにかかる時間を確認することです。強制的なガベージコレクトを実行するのに役立つかどうかを確認することができます。しかし、生産コードでは、特にサーバー上で強制GCを実行しないでください。
しかし、それは問題の半分に過ぎません。ほとんどの場合、他のライブラリがあなたの文字列で行うことに依存します。パスワードを他の文字列に埋め込み、それを参照し続けると、パスワードを制御することなくメモリが保護されなくなります。
関連する問題
- 1. ファイルからデータを読み取るC++
- 2. データを読み取るためのC++ライブラリ
- 3. WinFormsからWPF ResourceDictionariesを読み取る
- 4. ライブラリからプログラムで読み取る
- 5. 実行中のアプリケーションからデータを読み取る方法
- 6. アプリケーションからメモリカードのデータを読み取る
- 7. 別のアプリケーションからデータを読み取る
- 8. USB-GPS受信機からデータを読み取る
- 9. CLI C++アプリケーションからライブラリ内にC#WPFフォームをロードする
- 10. Javaアプリケーションがカードリーダーからデータを読み取る
- 11. iPhoneアプリケーションSqlite3データベースからデータを読み取る
- 12. Oracle Apexアプリケーション内からPOSTデータを読み取る
- 13. Cのアクセスデータベースからデータを読み取る
- 14. CのWebサイトからデータを読み取る
- 15. .csvからC++の配列にデータを読み取る
- 16. C#のxml stringからデータを読み取る方法
- 17. C#のXMLファイルからデータを読み取る
- 18. Windowsサーバー2008のC#アプリケーションからドキュメントタグを読み取る
- 19. USB MIDIデバイスからMIDI信号を読み取るためのC/C++ライブラリ
- 20. テキストファイルからデータを読み取る
- 21. Dukascopyチックバイナリファイルからデータを読み取る
- 22. シリアルポートからデータを読み取る
- 23. ファイルからデータを読み取る
- 24. ファイルからCSVデータを読み取る
- 25. sqliteビューからデータを読み取る
- 26. 配列からデータを読み取る
- 27. NSTableViewからデータを読み取る
- 28. データストアからデータを読み取る
- 29. Excelからデータを読み取る
- 30. Excelファイルからデータを読み取る
私のテストパスワードが "pass123"だった場合、WeakReference(http://msdn.microsoft.com/en-us/library/system.weakreference(v=VS.90).aspx)を " pass123 "、そして文字列が.NETで不変なので、他のコードで" pass123 "を使用している場合... WeakReferenceで何をしますか?デバッガに時計を入れますか? –
はい、それは一般的なアイデアです。ライブラリ呼び出しの後、弱参照の文字列にrefを置き、元の文字列refをnullに設定します。そして、強制的にグローバルなGCがそれを消してしまう場合に試してみることができます。もしそれが消えてしまったら、図書館はあなたの秘密の文字列を少なくとも確実に生きていないと知っています。次のステップは、あなたの文字列がガベージコレクションされるまでにどれくらいの時間がかかるかを、デバッグビルドでテストすることです。あなたは弱点を守って、ターゲットがヌルになるときをチェックします。 –
一般に、最初に文字列を長くしておくと、それ以降に収集されるまでの時間が長くなります。あなたのAPIコールが長い時間がかかったり、GCが頻繁にトリガされたりすると、.netはあなたの文字列が長続きすると判断し、完全なGCが発生した場合にのみ破棄します。 GUIアプリケーションでは、たとえば自分のアプリがアイドル状態になったときなど、自分自身を起動させることができます。 –