CA2326:請勿使用「無」以外的 TypeNameHandling 值

屬性
規則識別碼 CA2326
標題 請勿使用「無」以外的 TypeNameHandling 值
類別 安全性
修正程式是中斷或非中斷 不中斷
預設在 .NET 8 中啟用 No

原因

當符合下列任一條件時,就會引發此規則:

檔案描述

還原序列化未受信任資料時,不安全的還原序列化程式會易受攻擊。 攻擊者可以修改序列化的資料,以包含非預期的型別,以插入具有惡意副作用的物件。 例如,對不安全還原串行化程式的攻擊可能會在基礎操作系統上執行命令、透過網路通訊或刪除檔案。

此規則會 尋找以外的 Newtonsoft.Json.TypeNameHandlingNone。 如果只有在指定 Newtonsoft.Json.Serialization.ISerializationBinder 以限制還原串行化類型時,才想要還原串行化,請停用此規則並改為啟用規則 CA2327CA2328CA2329CA2330

如何修正違規

隱藏警告的時機

如果下列狀況,可以放心地隱藏此規則的警告:

  • 您知道輸入是受信任的。 請考慮應用程式的信任界限和數據流可能會隨著時間而變更。
  • 您已在如何修正違規採取其中一項預防措施。

隱藏警告

如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。

#pragma warning disable CA2326
// The code that's violating the rule is on this line.
#pragma warning restore CA2326

若要停用檔案、資料夾或項目的規則,請在組態檔中將其嚴重性設定為 。none

[*.{cs,vb}]
dotnet_diagnostic.CA2326.severity = none

如需詳細資訊,請參閱 如何隱藏程式代碼分析警告

虛擬程式代碼範例

違規

using Newtonsoft.Json;

public class ExampleClass
{
    public JsonSerializerSettings Settings { get; }

    public ExampleClass()
    {
        Settings = new JsonSerializerSettings();
        Settings.TypeNameHandling = TypeNameHandling.All;    // CA2326 violation.
    }
}
Imports Newtonsoft.Json

Public Class ExampleClass
    Public ReadOnly Property Settings() As JsonSerializerSettings

    Public Sub New()
        Settings = New JsonSerializerSettings()
        Settings.TypeNameHandling = TypeNameHandling.All    ' CA2326 violation.
    End Sub
End Class

解決方案

using Newtonsoft.Json;

public class ExampleClass
{
    public JsonSerializerSettings Settings { get; }

    public ExampleClass()
    {
        Settings = new JsonSerializerSettings();

        // The default value of Settings.TypeNameHandling is TypeNameHandling.None.
    }
}
Imports Newtonsoft.Json

Public Class ExampleClass
    Public ReadOnly Property Settings() As JsonSerializerSettings

    Public Sub New()
        Settings = New JsonSerializerSettings()

        ' The default value of Settings.TypeNameHandling is TypeNameHandling.None.
    End Sub
End Class

CA2327:請勿使用不安全的 JsonSerializerSettings

CA2328:確定 JsonSerializerSettings 安全

CA2329:請勿使用不安全的組態來還原序列化 JsonSerializer

CA2330:在還原序列化時,請確認 JsonSerializer 有安全的組態