引入了新的安全分析器,以防止通过某些属性意外泄露用户数据。 这些分析器通过标识缺少显式序列化设置的属性来实施最佳做法,例如:
- DesignerSerializationVisibilityAttribute
- DefaultValueAttribute
ShouldSerialize[propertyName]
方法
分析器生成警告,例如:
WFO1000:属性“property”未为其属性内容配置代码序列化。
默认情况下,每个分析器都会生成一个错误,确保开发人员在开发过程中尽早了解潜在的安全性和数据泄露问题。
此更改旨在通过实施适当的序列化实践来提高 Windows 窗体应用的安全性和可维护性,从而降低意外数据泄露的风险。
旧行为
以前,设计器可以序列化 Windows 窗体和 UserControl 控件中的属性,而无需显式配置其序列化行为。 这可能会导致将意外数据包含在生成的代码或资源文件中,从而产生潜在的安全风险。 这种行为在自定义业务线 UserControl 对象中尤其有问题,令人很容易忽略不应公开的敏感数据的序列化。 例如,可以将包含敏感信息(如用户数据或内部配置)的属性直接写入设计器生成的 .cs 文件或嵌入到 .resx 文件中。
新行为
从 .NET 9 开始,新的 Windows 窗体安全分析器对控件和 UserControl 对象中的属性序列化实施更严格的控制。 默认情况下,如果属性没有显式定义其 CodeDOM 序列化行为,分析器将生成错误。 此行为可确保不会意外序列化属性。 可以调整 .editorconfig 设置,以更改分析器的严重性或抑制显示错误。
引入的版本
.NET 9 RC 1
中断性变更的类型
此项更改可能会影响源兼容性。
更改原因
进行此更改有两个主要原因:
增强安全性:通过实施显式序列化定义,分析器可显著降低意外数据泄露的风险,尤其是在 LOB 应用程序中。 这在过去曾发生过,现在在 BinaryFormatter 序列化程序移除的上下文中更有必要。 通过尽量防止意外地开始序列化,对于没有专用类型转换器的类型,在资源文件中的二进制序列化方面不会出现向后兼容性或安全性问题。
改进了代码清晰度和可维护性:此功能可确保序列化行为透明且有意为之,从而有助于代码评审和将来的维护。
建议的操作
查看分析器标记的属性,并根据需要配置适当的序列化设置。
有关快速修复(不建议这样做),请在解决方案文件夹或项目文件夹级别,在 .editorconfig 文件中添加以下条目:
[*.cs] # WFO1000: A property should determine its property content serialization with the DesignerSerializationVisibilityAttribute, DefaultValueAttribute or the ShouldSerializeProperty method dotnet_diagnostic.WFO1000.severity = silent
受影响的 API
- 不适用