私はXMLを使用して第三者Webサービスと通信しています。私たちのセキュリティスキャナがいくつかの脆弱性を報告している点を除いて、すべてうまくいっています。CWE-216XMLSerializationを使用したクリアテキストパスワード
パスワードが実際にサードパーティがクリアテキストで送信されるパスワードを必要とする(例のために簡素化された)以下に類似LoginDetails
クラス
[Serializable()]
public class LoginDetails
{
public string Login { get; set; }
public string Password { get; set; }
}
内のメモリに格納されます。だから残念ながら私はここでは選択肢がありません。私がしたいのは、フィールドが安全に保管され、かつ/または使用されたときにできるだけ早くメモリから取り除かれることです。
修復に関して、私はSecureString
の両方を明示的に使用しようとしましたが、StringBuilder
を使用すると、これは不変性を否定します。私もLoginDetails
クラスにIDisposable
を実装しようとしました。これは、2つのプロパティをnullに設定することで構成されていました。私は様々な議論につながりました(particularly this one)、それは実際にはあまり効果がないと述べています。
フィールドタイプをSecureString
またはStringBuilder
に変更すると問題が発生します。これらは正しくシリアル化されないため、サードパーティでリクエストが失敗します。 XMLSerializer
をオーバーライドして、これらのタイプを異なる方法で処理する方法はありますか?つまり、私たちの側ではメモリにいくらか安全に保存されますが、クリアテキストで第三者に送信されます。これらのセキュリティの試みは両側では実施されないでしょうか?
また、私が完全に見落としたことはありますか?
多くのおかげ
よう
finally
ブロック内に配置することができ、あなたは彼らが正しくシリアライズされていないとはどういう意味ですか? – NMGod私はそのビットを言い直しましょう。私は彼らが彼らのタイプに応じて "正しく"シリアライズされていると仮定しています。 SecureStringは直列化可能(わかりやすい)ではありませんが、StringBuilderはとして xx xx StringBuilder>としてシリアル化されます。私が必要とするのは、私がXMLSerializerを使用するまで安全である(または私が現在持っているものよりも安全な)ものです。その時点で、Passwordプロパティのクリアテキスト値が第三者に送信されます。 –
StringBuilderをRemmeberするだけでは非継承です。 – NMGod