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 | CA5367 |
| Tytuł | Nie serializuj typów z polami wskaźnika |
| 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
Wskaźniki nie są bezpieczne, co oznacza, że nie można zagwarantować poprawności pamięci, w której wskazują. Serializacja typów z polami wskaźników jest zagrożeniem bezpieczeństwa, ponieważ może to umożliwić atakującemu kontrolowanie wskaźnika.
Opis reguły
Ta reguła sprawdza, czy istnieje klasa z możliwością serializacji z polem wskaźnika lub właściwością. Elementy członkowskie, których nie można serializować, mogą być wskaźnikiem, takim jak statyczne elementy członkowskie lub pola oznaczone znakiem System.NonSerializedAttribute.
Jak naprawić naruszenia
Nie używaj typów wskaźników dla składowych w klasie możliwej do serializacji albo nie serializuj tych składowych, które są wskaźnikami.
Kiedy pomijać ostrzeżenia
Nie ryzykuj używania wskaźników w typach możliwych do serializacji.
Przykłady pseudokodu
Naruszenie
using System;
[Serializable()]
unsafe class TestClassA
{
private int* pointer;
}
Rozwiązanie 1
using System;
[Serializable()]
unsafe class TestClassA
{
private int i;
}
Rozwiązanie 2
using System;
[Serializable()]
unsafe class TestClassA
{
private static int* pointer;
}