Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA2315 |
| Tytuł | Nie używaj niezabezpieczonego deserializatora ObjectStateFormatter |
| Kategoria | Bezpieczeństwo |
| Poprawka łamiąca lub nienaruszająca | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Nie. |
| Zastosowane języki | C# i Visual Basic |
Przyczyna
Metoda System.Web.UI.ObjectStateFormatter deserializacji została wywołana lub odwołana.
Opis reguły
Niezabezpieczone deserializatory są podatne podczas 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 System.Web.UI.ObjectStateFormatter wywołania metody deserializacji lub referencje.
Jak naprawić naruszenia
Jeśli to możliwe, zamiast tego użyj bezpiecznego serializatora i nie zezwalaj osobie atakującej na określenie dowolnego typu deserializacji. Niektóre bezpieczniejsze serializatory obejmują:
- System.Runtime.Serialization.DataContractSerializer
- System.Runtime.Serialization.Json.DataContractJsonSerializer
- System.Web.Script.Serialization.JavaScriptSerializer- Nigdy nie używaj System.Web.Script.Serialization.SimpleTypeResolver. Jeśli musisz użyć narzędzia rozpoznawania typów, ogranicz deserializowane typy do oczekiwanej listy.
- System.Xml.Serialization.XmlSerializer
- Newtonsoft Json.NET — użyj typeNameHandling.None. Jeśli musisz użyć innej wartości dla TypeNameHandling, ogranicz deserializowane typy do oczekiwanej listy przy użyciu niestandardowej ISerializationBinder.
- Bufory protokołu
Spraw, aby zserializowane dane były odporne na manipulacje. Po serializacji kryptograficznie podpisz serializowane dane. Przed deserializacji zweryfikuj podpis kryptograficzny. Chroń klucz kryptograficzny przed ujawnieniem i zaprojektuj rotacje kluczy.
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.
Przykłady pseudokodu
Naruszenie
using System.IO;
using System.Web.UI;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
ObjectStateFormatter formatter = new ObjectStateFormatter();
return formatter.Deserialize(new MemoryStream(bytes));
}
}
Imports System.IO
Imports System.Web.UI
Public Class ExampleClass
Public Function MyDeserialize(bytes As Byte()) As Object
Dim formatter As ObjectStateFormatter = New ObjectStateFormatter()
Return formatter.Deserialize(New MemoryStream(bytes))
End Function
End Class