.net security

.net - Reglas de seguridad de herencia violadas mientras se reemplaza el miembro-SecurityRuleSet.Level2



(4)

En cuanto a este error en entornos de alojamiento compartido que permiten aplicaciones de plena confianza. Cuando bin despliega una aplicación, a menudo sobrescribe web.config. En IIS, cuando cambia la configuración de confianza a algo diferente de la predeterminada, su sección de configuración web se modifica con:

<system.web> <trust level="Full" /> <system.web>

Copiar un nuevo web.config durante la implementación a menudo sobrescribe esta configuración; sin embargo, el Administrador de IIS seguirá mostrando el sitio como "Confianza total", cuando en realidad el sitio se ejecuta en cualquier nivel de confianza predeterminado para su proveedor de host compartido (generalmente medio) .

Verá este error y hará lo que hice: intente descubrir por qué lo verá aunque sepa que el sitio se está ejecutando con plena confianza, cuando en realidad no lo es. La solución es modificar su configuración web como se indicó anteriormente antes de la implementación, o usar el Administrador de IIS para configurar el sitio a un nivel de confianza diferente (alto, por ejemplo), aplicarlo y luego volver a configurarlo por completo. Al hacerlo, se reinserta la información de archivo de configuración necesaria y se reinicia el grupo de aplicaciones con plena confianza.

Tengo una clase que hereda de Exception. En .NET 4, empecé a recibir un error de tiempo de ejecución:

Las reglas de seguridad de herencia violaron al anular el miembro: MyBusinessException.GetObjectData (System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) ''. La accesibilidad de seguridad del método primordial debe coincidir con la accesibilidad de seguridad del método que se reemplaza.

Creo que el problema está causado por el hecho de que estoy anulando GetObjectData.

Sé que una respuesta para resolver el problema es establecer SecurityRuleSet:

[assembly: SecurityRules(SecurityRuleSet.Level1)]

Esta no es una respuesta aceptable, me gustaría saber cómo solucionar el problema sin tener que relajar las reglas de seguridad predeterminadas en .NET 4.


Marque GetObjectData con SecurityCriticalAttribute , porque se aplica a Exception.GetObjectData . Un miembro anulado debe tener la misma accesibilidad de seguridad (crítica, segura, crítica o transparente).

Lea los cambios de seguridad en .NET Framework 4 y Security Transparent Code, Level 2 de MSDN para obtener más información.

Para evitar todas las posibles excepciones de tiempo de ejecución de seguridad, habilite el Análisis de código con el conjunto de reglas de seguridad. Obtendrá advertencias de análisis estático que pueden corresponder a errores de tiempo de ejecución.


Para mí, el problema fue con la biblioteca log4net. Descargué la fuente y agregué el archivo del proyecto a mi solución para poder acceder a bibliotecas externas. Sin embargo, log4net necesitaba el símbolo NET_4_0 definido para la compilación condicional. Por defecto, tenía NET_1_0 definido. Ingresé a las propiedades del proyecto log4net y cambié NET_1_0 a NET_4_0 , y esto solucionó el problema.

Aparte: Tal vez no sigo las mejores prácticas al incluir las bibliotecas en mi proyecto. Si ese es el caso, me gustaría recibir comentarios sobre las diferentes formas de hacerlo, y los pros y contras de cada opción. Mi opinión actual es que, si hay un error, poder ver la fuente de la biblioteca me ayudará a comprender qué espera la biblioteca, lo que me ayudará a aclarar el error. Además, ver cómo otras personas escriben el código fuente no es nada sino una valiosa experiencia de aprendizaje. Básicamente, estoy tratando de seguir el consejo de Jeff Atwood que se encuentra here . Pero si hay una mejor manera de lograr esto, soy todo oídos.


Tuve este problema cuando estaba llamando a un ensamblado que tenía el atributo AllowPartiallyTrustedCallers:

[assembly: System.Security.AllowPartiallyTrustedCallers]

Eliminarlo resolvió mi problema sin cambiar a SecurityRuleSet.Level1.