CA2326: Nie używaj wartości TypeNameHandling innych niż None
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA2326 |
Tytuł | Nie używaj wartości TypeNameHandling innych niż None |
Kategoria | Bezpieczeństwo |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Nie. |
Przyczyna
Ta reguła jest uruchamiana po spełnieniu jednego z następujących warunków:
- Przywoływana jest wartość wyliczenia Newtonsoft.Json.TypeNameHandling , inna niż
None
, . - Wartość całkowita reprezentująca wartość niezerową jest przypisywana do zmiennej TypeNameHandling .
Opis reguły
Niezabezpieczone deserializatory są podatne na deserializacji niezaufanych danych. Osoba atakująca może zmodyfikować serializowane dane w celu uwzględnienia nieoczekiwanych typów w celu wstrzyknięcia obiektów ze złośliwymi skutkami ubocznymi. Atak na niezabezpieczonego deserializatora może na przykład wykonywać polecenia w bazowym systemie operacyjnym, komunikować się za pośrednictwem sieci lub usuwać pliki.
Ta reguła znajduje wartości Newtonsoft.Json.TypeNameHandling inne niż None
. Jeśli chcesz deserializować tylko wtedy, gdy określono parametr Newtonsoft.Json.Serialization.ISerializationBinder w celu ograniczenia typów deserializacji, wyłącz tę regułę i włącz reguły CA2327, CA2328, CA2329 i CA2330 .
Jak naprawić naruszenia
- Jeśli to możliwe, użyj wartości TypeNameHandling.
None
- Ustaw serializacji danych na dowód manipulacji. Po serializacji kryptograficznie podpisz serializowane dane. Przed deserializacji zweryfikuj podpis kryptograficzny. Ochrona klucza kryptograficznego przed ujawnieniem i projektowaniem rotacji kluczy.
- Ogranicz deserializowane typy. Zaimplementuj niestandardowy element Newtonsoft.Json.Serialization.ISerializationBinder. Przed deserializacji przy użyciu Json.NET upewnij się, że niestandardowa właściwość ISerializationBinder jest określona w właściwości Newtonsoft.Json.JsonSerializerSettings.SerializationBinder . W zastąpieniu metody Newtonsoft.Json.Serialization.ISerializationBinder.BindToType , jeśli typ jest nieoczekiwany, zwróć
null
lub zgłosi wyjątek, aby zatrzymać deserializacji.- Jeśli ograniczysz typy deserializowane, możesz wyłączyć tę regułę i włączyć reguły CA2327, CA2328, CA2329 i CA23330. Reguły CA2327, CA2328, CA2329 i CA2330 pomagają upewnić się, że używasz elementu ISerializationBinder podczas używania wartości TypeNameHandling innych niż
None
.
- Jeśli ograniczysz typy deserializowane, możesz wyłączyć tę regułę i włączyć reguły CA2327, CA2328, CA2329 i CA23330. Reguły CA2327, CA2328, CA2329 i CA2330 pomagają upewnić się, że używasz elementu ISerializationBinder podczas używania wartości TypeNameHandling innych niż
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć ostrzeżenie z tej reguły, jeśli:
- Wiesz, że dane wejściowe są zaufane. Należy wziąć pod uwagę, że granica zaufania aplikacji i przepływy danych mogą ulec zmianie w czasie.
- Podjęto jeden z środków ostrożności w temacie Jak naprawić naruszenia.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA2326
// The code that's violating the rule is on this line.
#pragma warning restore CA2326
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA2326.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.
Przykłady przykładów kodu przykładowego
Naruszenie
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
Rozwiązanie
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
Powiązane reguły
CA2327: Nie używaj niezabezpieczonych ustawień JsonSerializerSettings
CA2328: Upewnij się, że ustawienia JsonSerializerSettings są bezpieczne
CA2330: Upewnij się, że program JsonSerializer ma bezpieczną konfigurację podczas deserializacji