8

veracode を使用してコードのセキュリティ分析を行っており、以下のコード、特に Deserialize() が呼び出される場所で 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;
        }
    }

私が欠けている可能性があるもの、または他に試してみるものがあるかどうかを誰かが提案できますか.

4

1 に答える 1

2

同様の問題がありました。文字列から読み取るときに、xmlReader を xmlTextReader に変更する必要があります。

このようなもの -

  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;
  }

ではごきげんよう!

于 2018-05-09T04:34:19.610 に答える