【问题标题】:how to fix for Deserialization of Untrusted Data如何修复不可信数据的反序列化
【发布时间】:2018-06-01 11:34:17
【问题描述】:

我的实用程序类中有一个通用的反序列化 C# 代码。下面是代码示例。当我们对代码执行安全扫描时,我们在第 3 行发现了“不可信数据的反序列化”漏洞。xml 文件的反序列​​化似乎很常见。我不确定我们如何解决这个问题。有人可以指导我吗?

public static T DeserializeXmlFile<T>(string xmlFilePath)
   {

     try

     {

     XmlSerializer xs= GetSerializer(typeof(T));  //Line#1

     FileStream fs= new FileStream(xmlFilePath, FileMode.Open); //Line#2

     var result = (T)xs.Deserialize(fs); //Line #3

     fs.Close(); //Line#4

     return result; //Line#5
   }
  catch (Exception ex)
  {
     LogException("Deserialization exception"); 
     return default(T);
   }
  }

问候, 纳克

【问题讨论】:

  • XmlSerializer 仅反序列化已知类型——通过属性、字段和XmlInclude 属性的反射静态可发现的类型。它没有可以加载任意类型的机制(除非你做了一些疯狂的事情,比如here 所示)。所以我不确定如何解决警告。您的“安全扫描”软件是否提供任何指导?你到底在用什么软件?
  • 您应该将 FileStream fs 包装在 using 语句中,而不是手动关闭它。在如此低的水平上捕获和吞下所有异常似乎......不明智。
  • @dbc,该漏洞的详细信息与此链接中给出的类似 - [link]owasp.org/index.php/Deserialization_of_untrusted_data

标签: c# .net serialization


【解决方案1】:

使用 XmlReader 代替 FileStream 进行反序列化

//第2行

XmlReader xmlreader = XmlReader.Create(new FileStream(xmlFilePath, FileMode.Open)); 

这里是微软解决方案的链接 - CA5369: Use XmlReader for Deserialize

这是另一个二进制反序列化的链接 - CA2300: Do not use insecure deserializer BinaryFormatter

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 2019-12-19
    相关资源
    最近更新 更多