Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.net反序列化过程中防止XML外部实体(XXE)攻击_C#_.net_Xml_Veracode - Fatal编程技术网

C# 如何在.net反序列化过程中防止XML外部实体(XXE)攻击

C# 如何在.net反序列化过程中防止XML外部实体(XXE)攻击,c#,.net,xml,veracode,C#,.net,Xml,Veracode,我们正在使用veracode对代码进行安全性分析,下面的代码显示XXE漏洞,特别是在调用反序列化()的地方。如何防止序列化程序访问外部实体。我在下面尝试将XMLReader的XMLresolver设置为null,但没有成功 public static T DeserializeObject(string xml, string Namespace) { System.Xml.Serialization.XmlSerializer serializer = new

我们正在使用veracode对代码进行安全性分析,下面的代码显示XXE漏洞,特别是在调用反序列化()的地方。如何防止序列化程序访问外部实体。我在下面尝试将XMLReader的XMLresolver设置为null,但没有成功

    public static T DeserializeObject(string xml, string Namespace)
    {
        System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(T), Namespace);

        MemoryStream stream =
                new MemoryStream(Encoding.Default.GetBytes(xml));
        XmlReaderSettings settings = new XmlReaderSettings();

        // allow entity parsing but do so more safely
        settings.DtdProcessing = DtdProcessing.Ignore;
        settings.XmlResolver = null;

        using (XmlReader reader = XmlReader.Create(stream, settings))
        {
            return serializer.Deserialize(reader) as T;
        }
    }

有人能告诉我可能遗漏了什么,或者是否有其他东西可以尝试。

我也有类似的问题。在读取字符串时,需要使用xmlTextReader更改xmlReader

类似这样的事情-

  public static T DeserializeObject(string xml, string Namespace)
  {
        System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(T), Namespace);

        //**** I don't think you need this block of code *********
        //MemoryStream stream = new MemoryStream(Encoding.Default.GetBytes(xml));
        //XmlReaderSettings settings = new XmlReaderSettings();

        // allow entity parsing but do so more safely
        //settings.DtdProcessing = DtdProcessing.Ignore;
        //settings.XmlResolver = null;
        //*********************************************

        XmlTextReader reader = new XmlTextReader(xml)
        {
            XmlResolver = null
        };

        return serializer.Deserialize(reader) as T;
  }

祝你一切顺利

null仅对DTD模式有帮助,您必须使用blackjack和hookers实现自己的解析器^w^w^w,并且不处理所有外部URL(这里有更好的解释)@vitayglob我将XmlResolver设置为null,理论上不应处理任何外部URL。另外,我也尝试过将xmlresolver设置为XmlUrlReolver的自定义实现,但问题仍然没有得到解决。使用“不工作”,您的意思是Veracode仍在抱怨,还是您仍然能够成功执行XXE攻击?我遇到了同样的问题,代码实现正确,Veracode仍在抱怨