gpt4 book ai didi

c# - 如何在 .net 反序列化期间防止 XML 外部实体 (XXE) 攻击

转载 作者:数据小太阳 更新时间:2023-10-29 01:48:26 28 4
gpt4 key购买 nike

我们正在使用 veracode 对我们的代码进行安全分析,它显示了以下代码的 XXE 漏洞,特别是在调用 Deserialize() 的地方。我们如何防止序列化程序访问外部实体。我在下面为 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;
}
}

任何人都可以建议我可能遗漏了什么,或者是否还有其他尝试。

最佳答案

我遇到了类似的问题。您需要在读取字符串时将 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;
}

祝一切顺利!

关于c# - 如何在 .net 反序列化期间防止 XML 外部实体 (XXE) 攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34995497/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com