在C#中安全地解析XML

在C#中安全地解析XML,第1张

概述我有一个C#应用程序,它接收来自外部服务的字节数组,表示UTF-8编码的 XML消息.这个 XML数据包含我不希望存储在字符串对象中的敏感数据,因为字符串是不可变的,当我完成它时我无法擦除这些值.我目前正在使用System.XML.XmlReader将值解析为字符串(请参阅下面的代码).如果没有我的代码(或我调用的代码)将敏感数据存储为字符串,我怎么能这样做呢? byte[] messsage = 我有一个C#应用程序,它接收来自外部服务的字节数组,表示UTF-8编码的 XML消息.这个 XML数据包含我不希望存储在字符串对象中的敏感数据,因为字符串是不可变的,当我完成它时我无法擦除这些值.我目前正在使用System.XML.XmlReader将值解析为字符串(请参阅下面的代码).如果没有我的代码(或我调用的代码)将敏感数据存储为字符串,我怎么能这样做呢?

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,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,bytes)];            decoder.GetChars(buffer,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);        }
解决方法 基于答案,并且鉴于字符串是不可变的,您应该编写自己的使用char []的XML解析器.完成解析后,擦除char数组内容.要在程序中使用敏感数据,请使用 SecureString作为@Ga berber和评论中建议的@Mumbo.

它很难并且重复工作,但是这样你就可以确保在解析后立即擦除内存.

总结

以上是内存溢出为你收集整理的在C#中安全地解析XML全部内容,希望文章能够帮你解决在C#中安全地解析XML所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1227066.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存