C# 如何修复SCS0028?

C# 如何修复SCS0028?,c#,xmlserializer,suppress-warnings,security-code-scan,C#,Xmlserializer,Suppress Warnings,Security Code Scan,Visual Studio中的安全扫描警告将在生成过程中显示。目前,我正在处理这些警告以将其删除。我尝试了几个MSDN站点,但没有成功。我也读过OWSAP,但它们与C#没有明确的联系 代码: 公共静态类XMLUtility { 公共静态T反序列化XML(此字符串xmlString) { T返回值=默认值(T); if(string.IsNullOrEmpty(xmlString)) 返回值; XmlSerializer serial=新的XmlSerializer(typeof(T)); St

Visual Studio中的安全扫描警告将在生成过程中显示。目前,我正在处理这些警告以将其删除。我尝试了几个MSDN站点,但没有成功。我也读过OWSAP,但它们与C#没有明确的联系

代码:

公共静态类XMLUtility
{
公共静态T反序列化XML(此字符串xmlString)
{
T返回值=默认值(T);
if(string.IsNullOrEmpty(xmlString))
返回值;
XmlSerializer serial=新的XmlSerializer(typeof(T));
StringReader=新的StringReader(xmlString);
对象结果=串行。反序列化(读取器);
if(result!=null&&result为T)
{
返回值=((T)结果);
}
返回值;
}
}

首先,警告是有效的,因为类型T和xmlString是从外部传递的,并且可能不受信任(用户输入)。您可以查看概念证明

没有为警告实现代码修复程序,这就是“显示潜在修复”链接不起作用的原因。解决此问题的选项太多,因此必须手动完成。您是否单击以阅读有关潜在解决方案的信息

如果输入是可信的,那么如果您曾经使用过任何VisualStudioAnalyzer,则另一个标准操作将被抑制。关于功能

我发现UI不是很直观,因为您必须单击带下划线的代码段,只有在行的开头出现了一个气泡,此时“抑制”菜单可用:

菜单可用的另一个地方是错误列表:


这里只是一个旁注:我建议您在问题中粘贴反源代码,而不是仅仅插入一条消息,这样其他用户就可以重现该问题。顺便问一下,您看到“显示潜在修复”链接了吗?我认为您可以从中找到此警告的修复程序是的,我尝试过,但没有显示任何修复程序。通过查看文档,我无法真正找到如何使用
XmlSerializer
创建漏洞。我认为
XmlSerializer
不支持
对象
属性的序列化,因此序列化/反序列化的对象是“已知”的,而未知/计划外的对象不能反序列化。您不能在xml中插入
元素,而希望
文件流
将被反序列化。例如,它表明要反序列化
对象[]
,您必须通知
XmlSerializer
它必须支持的额外类型。
public static class XMLUtility
    {
        public static T DeserializeXML<T>(this string xmlString)
        {
            T returnValue = default(T);
            if (string.IsNullOrEmpty(xmlString))
                return returnValue;
            XmlSerializer serial = new XmlSerializer(typeof(T));
            StringReader reader = new StringReader(xmlString);
            object result = serial.Deserialize(reader);
            if (result != null && result is T)
            {
                returnValue = ((T)result);
            }
            return returnValue;
        }
    }