CA2111: указатели не должны быть видимыми
TypeName |
PointersShouldNotBeVisible |
CheckId |
CA2111 |
Категория |
Microsoft.Security |
Критическое изменение |
Критическое изменение |
Причина
Открытое или защищенное поле System.IntPtr или System.UIntPtr доступно не только для чтения.
Описание правила
Поля IntPtr и UIntPtr принадлежат к типам указателей, используемых для доступа к неуправляемой памяти. Если указатель не является закрытым, внутренним или доступным только для чтения, злоумышленный код может изменить его значение, что может позволить получить доступ к произвольным областям памяти или вызвать сбой приложения или системы.
Сведения об обеспечении безопасного доступа к типу, содержащему поле указателя, см. в разделе CA2112: защищенные типы не должны предоставлять поля.
Устранение нарушений
Обеспечьте безопасность указателя, сделав его доступным только для чтения, внутренним или закрытым.
Отключение предупреждений
Предупреждения о нарушении этого правила можно отключить, если значение указателя не имеет большого значения.
Пример
В следующем примере показаны два указателя, один из которых нарушает данное правило, а другой удовлетворяет ему. Обратите внимание, что указатели, которые не являются закрытыми, также нарушают правило CA1051: не объявляйте видимые поля экземпляров.
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;
}
}
Связанные правила
CA2112: защищенные типы не должны предоставлять поля
CA1051: не объявляйте видимые поля экземпляров