4
UTF-8でエンコードされたXMLメッセージを表す外部サービスからバイト配列を受け取るC#アプリケーションがあります。このXMLデータには、文字列が不変なので、文字列オブジェクトに格納したくない機密データが含まれています。これらのデータを処理すると値を消去できません。私は現在System.XML.XmlReaderを使用して文字列として値を解析しています(下記のコードを参照)。私のコード(または私が呼んでいるコード)に、機密データを文字列として格納させずに、これを行う方法は?C#でXMLを安全に解析する
回答に基づいて byte[] messsage = Encoding.UTF8.GetBytes(request);
// Send message to the server.
sslStream.Write(messsage);
sslStream.Flush();
// read the response
byte[] buffer = new byte[2048];
StringBuilder messageData = new StringBuilder();
int bytes = -1;
do
{
bytes = sslStream.Read(buffer, 0, buffer.Length);
// Use Decoder class to convert from bytes to UTF8
// in case a character spans two buffers.
Decoder decoder = Encoding.UTF8.GetDecoder();
char[] chars = new char[decoder.GetCharCount(buffer, 0, bytes)];
decoder.GetChars(buffer, 0, bytes, chars, 0);
messageData.Append(chars);
// Check for ending tag.
if (messageData.ToString().IndexOf(expectedEndTag) != -1)
{
break;
}
} while (bytes > 0);
string response = messageData.ToString();
using (XmlReader reader = XmlReader.Create(new StringReader(response)))
{
reader.ReadToFollowing("Success");
string successVal = reader.ReadElementContentAsString();
success = bool.Parse(successVal);
}
値を暗号化します。何らかの悪い俳優がデータを傍受する可能性があるため、外部サービスから送信されるときには暗号化されている必要があります。 –
"このXMLデータには、文字列が不変なので、文字列オブジェクトに格納したくない重要なデータが含まれています。 SecureStringを参照してください。それは秘密であり、記憶に残されていないことを意味します。 https://msdn.microsoft.com/en-us/library/system.security.securestring(v=vs.110).aspx – astidham2003
メモリ内の文字列が気になる場合は、SecureStringを使用して調べることができます、https://msdn.microsoft.com/en-us/library/system.security.securestring(v=vs.110).aspx – Mumbo