2016-10-07 1 views
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); 
     } 
+0

値を暗号化します。何らかの悪い俳優がデータを傍受する可能性があるため、外部サービスから送信されるときには暗号化されている必要があります。 –

+2

"このXMLデータには、文字列が不変なので、文字列オブジェクトに格納したくない重要なデータが含まれています。 SecureStringを参照してください。それは秘密であり、記憶に残されていないことを意味します。 https://msdn.microsoft.com/en-us/library/system.security.securestring(v=vs.110).aspx – astidham2003

+0

メモリ内の文字列が気になる場合は、SecureStringを使用して調べることができます、https://msdn.microsoft.com/en-us/library/system.security.securestring(v=vs.110).aspx – Mumbo

答えて

0

、および文字列は不変であるという事実を考えると、あなたは[]のcharを使用し、独自のXMLパーサを書く必要があります。解析が完了したら、char配列の内容を消去します。プログラム内の機密データを使用するには、@ GaBerberとしてSecureStringを使用し、コメントには@Mumboを使用してください。

重複していますが、この方法では、解析した直後にメモリが消去されます。