CA5122: Las declaraciones P/Invoke no deben ser críticas para la seguridad
Elemento | Valor |
---|---|
RuleId | CA5122 |
Category | Microsoft.Security |
Cambio importante | Problemático |
Causa
Una declaración P/Invoke se ha marcado con SecuritySafeCriticalAttribute:
[assembly: AllowPartiallyTrustedCallers]
// ...
public class C
{
[SecuritySafeCritical]
[DllImport("kernel32.dll")]
public static extern bool Beep(int frequency, int duration); // CA5122 - safe critical p/invoke
}
En este ejemplo, C.Beep(...)
se ha marcado como crítico para la seguridad y disponible desde código transparente.
Nota
Esta regla está en desuso. Para más información, consulte Reglas en desuso.
Descripción de la regla
Los métodos se marcan como SecuritySafeCritical cuando realizan una operación que afecta a la seguridad pero también son seguros para su uso en código transparente. Una de las reglas fundamentales del modelo de transparencia de seguridad es que el código transparente nunca puede llamar directamente a código nativo con P/Invoke. Por consiguiente, aunque se marque P/Invoke como crítico para la seguridad y disponible desde código transparente no permitirá que se llame desde código transparente llamarlo, y es erróneo para los análisis de seguridad.
Cómo corregir infracciones
Para hacer que P/Invoke esté a disposición del código transparente, exponga para el mismo un método contenedor crítico para la seguridad y disponible desde código transparente:
[assembly: AllowPartiallyTrustedCallers
class C
{
[SecurityCritical]
[DllImport("kernel32.dll", EntryPoint="Beep")]
private static extern bool BeepPinvoke(int frequency, int duration); // Security Critical P/Invoke
[SecuritySafeCritical]
public static bool Beep(int frequency, int duration)
{
return BeepPInvoke(frequency, duration);
}
}
Cuándo suprimir las advertencias
No suprima las advertencias de esta regla.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de