Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
| Propiedad | Valor |
|---|---|
| Identificador de la regla | CA2109 |
| Título | Revisar los controladores de eventos visibles |
| Categoría | Seguridad |
| El arreglo es problemático o no problemático | Ruptura |
| Habilitado de forma predeterminada en .NET 10 | No |
| Idiomas aplicables | C# y Visual Basic |
Causa
Se detectó un método de control de eventos público o protegido.
Nota
Esta regla está en desuso. Se distribuyó por última vez con el paquete NuGet Microsoft.CodeAnalysis.NetAnalyzers 7.0.0 y el SDK de .NET 7.
La regla se eliminó porque la amenaza sobre la que advertía el analizador (un intermediario que no es de confianza que enlaza un controlador de eventos con privilegios a un invocador de eventos con privilegios) no existe desde .NET Framework 4.5.
Descripción de la regla
Un método de control de eventos visibles externamente presenta un problema de seguridad que requiere revisión.
No exponga los métodos de control de eventos a menos que sea absolutamente necesario. Se puede agregar un controlador de eventos, un tipo de delegado, que invoca el método expuesto a cualquier evento, siempre y cuando el controlador y las firmas de eventos coincidan. Los eventos puede generarlos cualquier código y se suelen generar mediante código del sistema de plena confianza en respuesta a las acciones del usuario, como hacer clic en un botón. Agregar una comprobación de seguridad a un método de control de eventos no impide que el código registre un controlador de eventos que invoca el método.
Una demanda no puede proteger de forma fiable un método invocado por un controlador de eventos. Las demandas de seguridad ayudan a proteger el código de llamantes no confiables al examinar los llamantes en la pila de llamadas. El código que agrega un controlador de eventos a un evento no tiene que estar necesariamente presente en la pila de llamadas cuando se ejecutan los métodos del controlador de eventos. Por lo tanto, la pila de llamadas podría tener únicamente iniciadores de la llamada de plena confianza cuando se invoca el método del controlador de eventos. Esto garantiza que las solicitudes realizadas por el método del controlador de eventos tengan éxito. Además, puede realizarse la aserción del permiso exigido cuando se invoca el método. Por estos motivos, el riesgo de no corregir una infracción de esta regla solo se puede evaluar después de revisar el método de control de eventos. Al revisar el código, tenga en cuenta los siguientes problemas:
¿El controlador de eventos realiza algún tipo de operación peligrosa o vulnerable, como la aserción de permisos o la supresión de permisos de código no administrado?
¿Cuáles son las amenazas de seguridad para y desde su código, dado que puede ejecutarse en cualquier momento con solo llamadores altamente confiables en la pila?
Cómo corregir infracciones
Para corregir una infracción de esta regla, revise el método y evalúe lo siguiente:
¿Puede hacer que el método de control de eventos no sea público?
¿Puede trasladar toda la funcionalidad peligrosa fuera del controlador de eventos?
Si existe una demanda de seguridad, ¿se puede llevar a cabo de alguna otra manera?
Cuándo suprimir las advertencias
Suprima una advertencia de esta regla solo después de una revisión de seguridad minuciosa, para asegurarse de que el código no plantea una amenaza de seguridad.
Supresión de una advertencia
Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.
#pragma warning disable CA2109
// The code that's violating the rule is on this line.
#pragma warning restore CA2109
Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.
[*.{cs,vb}]
dotnet_diagnostic.CA2109.severity = none
Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.
Ejemplo
En el código siguiente se muestra un método de control de eventos que puede utilizado de forma incorrecta por código malintencionado.
public class HandleEvents
{
// Due to the access level and signature, a malicious caller could
// add this method to system-triggered events where all code in the call
// stack has the demanded permission.
// Also, the demand might be canceled by an asserted permission.
[SecurityPermissionAttribute(SecurityAction.Demand, UnmanagedCode = true)]
// Violates rule: ReviewVisibleEventHandlers.
public static void SomeActionHappened(Object sender, EventArgs e)
{
Console.WriteLine("Do something dangerous from unmanaged code.");
}
}