CA2133: Representantes devem ser associados a métodos com transparência consistente
Item | Valor |
---|---|
RuleId | CA2133 |
Categoria | Microsoft.Security |
Alteração da falha | Quebra |
Observação
Esse aviso só é aplicado ao código que está executando o CoreCLR (a versão do CLR específica para aplicativos web Silverlight).
Causa
Esse aviso é acionado em um método que associa um delegado que foi marcado com SecurityCriticalAttribute a um método transparente ou marcado com SecuritySafeCriticalAttribute. O aviso também é acionado em um método que associa um representante transparente ou de segurança crítica a um método crítico.
Observação
Esta regra foi preterida. Para obter mais informações, confira Regras preteridas.
Descrição da regra
Os tipos delegados e os métodos aos quais eles se associam devem ter transparência consistente. Delegados transparentes e críticos para a segurança podem se associar apenas a outros métodos transparentes ou críticos para a segurança. Da mesma forma, os delegados críticos só podem se associar a métodos críticos. Essas regras de associação garantem que o único código que possa invocar um método por meio de um delegado também possa ter invocado o mesmo método diretamente. Por exemplo, as regras de associação impedem que o código transparente invoque o código crítico diretamente por meio de um delegado transparente.
Como corrigir violações
Para corrigir a violação desse aviso, altere a transparência do delegado ou do método ao qual ele se associa para que a transparência dos dois seja equivalente.
Quando suprimir avisos
Não suprima um aviso nessa regra.
Código
using System;
using System.Security;
namespace TransparencyWarningsDemo
{
public delegate void TransparentDelegate();
[SecurityCritical]
public delegate void CriticalDelegate();
public class TransparentType
{
void DelegateBinder()
{
// CA2133 violation - binding a transparent delegate to a critical method
TransparentDelegate td = new TransparentDelegate(CriticalTarget);
// CA2133 violation - binding a critical delegate to a transparent method
CriticalDelegate cd = new CriticalDelegate(TransparentTarget);
}
[SecurityCritical]
void CriticalTarget() { }
void TransparentTarget() { }
}
}
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários