Ich habe eine C# -Anwendung, die ein Byte-Array von einem externen Dienst empfängt, der eine UTF-8-codierte XML-Nachricht darstellt. Diese XML-Daten enthalten sensible Daten, die ich lieber nicht in einem String-Objekt gespeichert hätte, da Strings unveränderlich sind und ich die Werte nicht löschen kann, wenn ich damit fertig bin. Ich verwende derzeit System.XML.XmlReader, um die Werte als Zeichenfolgen zu analysieren (siehe Code unten). Wie kann ich dies tun, ohne dass mein Code (oder der Code, den ich anrufe) die sensiblen Daten als String speichert?Sicheres Parsen von XML in C#
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);
}
Verschlüsseln Sie den Wert. Es sollte trotzdem verschlüsselt werden, wenn es vom externen Dienst übertragen wird, weil ein schlechter Akteur die Daten abfangen könnte. –
"Diese XML-Daten enthalten vertrauliche Daten, die ich lieber nicht in einem String-Objekt gespeichert hätte, da Strings unveränderlich sind und ich die Werte nicht löschen kann, wenn ich damit fertig bin". Siehe SecureString. Es soll vertraulich sein und nicht im Gedächtnis behalten werden. https://msdn.microsoft.com/en-us/library/system.security.securestring(v=vs.110).aspx – astidham2003
Wenn Sie nur besorgt über die Saiten besorgt sind, die im Speicher herumstehen, könnten Sie in die Verwendung von SecureString schauen , https://msdn.microsoft.com/en-us/library/system.security.securestring(v=vs.110).aspx – Mumbo