2017-10-19 3 views
1

WPFアプリケーションを作成する場合、PasswordBoxは入力されたパスワードをSecureStringとして保存します。これは完全に理にかなっています。しかし、私はHTTP APIを介してパスワードを送信したいと思います。HttpClient PostAsyncは、フォームエンコードされたデータの文字列を受け付けるようです。C#およびWPF - クライアント側のHTTP APIパスワードにSecureStringを使用する

私は他の人が最も顕著なのIs SecureString ever practical in a C# application?、関連する質問をしてきたが、私が最初Stringに変換せずに、HTTPエンドポイントにこのSecureStringを送信するために満足のいく方法を見つけていないことを認識しています。コンバートは最初にSecureStringのオブジェクトを完全に破棄します(プレーンテキストを管理対象メモリに戻すため)。

これを正式に(そして、好ましくは直接)行う方法はありますか?

完全な開示のために、私はHTTP APIを制御できません。

答えて

1

は、私は完璧ではないが、あなたのための最善の解決策は、this答えにrdev5によって投稿DecryptSecureString方法を、使用する(結局、パスワードはとにかく、ネットワークを介して平文で転送されている)である、ということだと思い

rdev5のメソッドはSecureStringを文字列に解読し、パスワードで何をするかを指示してからメモリから消去します。これにより、パスワードがメモリ内にあるウィンドウが減少し、そこからパスワードが覗くことができる時間が短縮されます。

Strings.DecryptSecureString(secureString, (password) => 
{ 
    // Do your API call here 
}); 

P.S.:元の投稿で指摘されているように、別の場所にあるpasswordの内容を保存しないように注意してください。

+0

グローバルには理想的ではないかもしれませんが、DisposableString型がないという問題は解決します。とてもよかったです。 HTTP APIは安全な接続であるため、パスワードは技術的に平文で送信されないことに注意してください。 –

関連する問題