共用方式為


新的安全性分析器

已引進新的安全性分析器,以防止透過特定屬性意外洩漏使用者資料。 這些分析器會藉由識別缺少明確序列化設定的屬性來強制執行最佳做法,例如:

分析器會產生警告,例如:

WFO1000:屬性 'property' 沒有為其屬性內容設定程式碼序列化。

根據預設,每個分析器都會產生錯誤,確保開發人員在開發早期就能意識到潛在的安全性和資料洩漏問題。

這項變更的用意在透過強制執行正確的序列化做法來提高 Windows Forms 應用程序的安全性和可維護性,從而減少意外資料暴露的風險。

先前的行為

以前,Windows Forms 和 UserControl 控制項中的屬性可以在未明確設定其序列化行為的情況下由設計工具序列化。 這可能會導致產生的程式碼或資源檔中包含非預期的資料,從而造成潛在的安全性風險。 這種行為在自訂企業營運 UserControl 物件中尤為棘手,因為很容易忽略不應該公開的敏感資料序列化。 例如,包含敏感資訊的屬性,例如使用者資料或內部設定,可能會直接寫入設計工具產生的 .cs 檔案或內嵌在 .resx 檔案中。

新的行為

從 .NET 9 開始,新的 Windows Forms 安全性分析器會對控制項和 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

  • N/A