CA2111: Wskaźniki nie powinny być widoczne
TypeName |
PointersShouldNotBeVisible |
CheckId |
CA2111 |
Kategoria |
Microsoft.Security |
Zmiana kluczowa |
Kluczowa |
Przyczyna
Pole publiczne lub chronione System.IntPtr lub System.UIntPtr nie jest tylko do odczytu.
Opis reguły
IntPtr i UIntPtr są typami wskaźnika, które są używane w celu dostępu do pamięci niezarządzanej.Jeżeli wskaźnik nie jest prywatny, wewnętrzny lub tylko do odczytu, złośliwy kod może zmienić wartość wskaźnika, potencjalnie umożliwiając dostęp do dowolnego miejsca w pamięci lub powodując błędy aplikacji lub systemu.
Jeśli zamierzasz uzyskać bezpieczny dostęp do typu, który zawiera pole wskaźnikowe, zobacz CA2112: Zabezpieczonych typów nie powinny wystawiać pól.
Jak naprawić naruszenia
Zabezpiecz wskaźnik poprzez ustawienie go na tylko do odczytu, wewnętrzny lub prywatny.
Kiedy pominąć ostrzeżenia
Ostrzeżenie od tej reguły można pominąć, jeśli nie polega się na wartości wskaźnika.
Przykład
Poniższy kod przedstawia wskaźniki, które naruszają i spełniają tą regułę.Należy zauważyć,że wskaźniki, które nie są prywatne również naruszają tą regułę CA1051: Nie są deklarowane widoczne instancji pola.
using System;
namespace SecurityRulesLibrary
{
public class ExposedPointers
{
// Violates rule: PointersShouldNotBeVisible.
public IntPtr publicPointer1;
public UIntPtr publicPointer2;
protected IntPtr protectedPointer;
// Satisfies the rule.
internal UIntPtr internalPointer;
private UIntPtr privatePointer;
public readonly UIntPtr publicReadOnlyPointer;
protected readonly IntPtr protectedReadOnlyPointer;
}
}
Powiązane reguły
CA2112: Zabezpieczonych typów nie powinny wystawiać pól
CA1051: Nie są deklarowane widoczne instancji pola