CA2111: os ponteiros não devem estar visíveis
TypeName |
PointersShouldNotBeVisible |
CheckId |
CA2111 |
Categoria |
Microsoft.Security |
Alteração Significativa |
Quebra |
Causa
Um público ou IntPtr protegido ou um campo de UIntPtr não são somente leitura.
Descrição da Regra
IntPtr e UIntPtr do ponteiro são os tipos que são usados para acessar a memória não gerenciado.Se um ponteiro não será privado, interno, ou somente leitura, o código mal-intencionado pode alterar o valor do ponteiro, potencialmente permitindo o acesso aos locais arbitrários na memória ou fazendo com que o aplicativo ou falhas do sistema.
Se você pretende proteger o acesso ao tipo que contém o campo do ponteiro, consulte CA2112: os tipos seguros não devem expor campos.
Como Corrigir Violações
Proteger o ponteiro fazendo o somente leitura, interno, ou particular.
Quando Suprimir Alertas
Suprima um aviso dessa regra se você não depende do valor do ponteiro.
Exemplo
O código a seguir mostra os ponteiros que violam e satisfazem a regra.Observe que os ponteiros não existe também violam a regra CA1051: não declarar campos de instância visíveis.
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;
}
}
Regras Relacionadas
CA2112: os tipos seguros não devem expor campos
CA1051: não declarar campos de instância visíveis