En primer lugar, para responder a su pregunta: El sistema de seguridad está diseñado para proteger BUENOS USUARIOS a partir del MALO CÓDIGO; explícitamente no está diseñado para proteger el BUEN CÓDIGO de los MALOS USUARIOS.Sus restricciones de acceso mitigan los ataques a sus usuarios por código hostil parcialmente confiable. No mitigan los ataques en su código de usuarios hostiles. Si la amenaza es que los usuarios hostiles obtengan su código, entonces usted tiene un gran problema. El sistema de seguridad no mitiga esa amenaza en absoluto.
En segundo lugar, para abordar algunas de las respuestas anteriores: comprender la relación completa entre la reflexión y la seguridad requiere una cuidadosa atención a los detalles y una buena comprensión de los detalles del sistema CAS. Las respuestas publicadas anteriormente que afirman que no existe conexión entre la seguridad y el acceso debido a la reflexión son engañosas y erróneas.
Sí, la reflexión le permite anular las restricciones de "visibilidad" (a veces). Eso no implica que no haya conexión entre el acceso y la seguridad. La conexión es que el derecho a utilizar la reflexión para anular las restricciones de acceso está profundamente conectado al sistema CAS de múltiples maneras.
En primer lugar, para hacerlo arbitrariamente, el sistema CAS debe otorgar permiso de reflexión privado. Por lo general, esto solo se concede al código completamente confiable, que, después de todo, ya podría hacer cualquier cosa.
En segundo lugar, en el nuevo modelo de seguridad .NET, suponga que al conjunto A se le otorga un superconjunto del conjunto de concesión del conjunto B por el sistema CAS. En este escenario, el código en el conjunto A puede usar la reflexión para observar las partes internas de B.
En tercer lugar, las cosas se complican bastante cuando se agrega código generado dinámicamente a la mezcla. Una explicación de cómo funciona "Omitir visibilidad" frente a "Visibilidad de omisión restringida", y cómo cambian las interacciones entre reflexión, control de acceso y el sistema de seguridad en escenarios donde se escupió código en tiempo de ejecución me llevaría más tiempo y espacio que tener disponible. Vea el blog de Shawn Farkas si necesita detalles.
Un "hacker" podría modificar su código sin los metadatos de .Net y Java. Alguien recuerda DeHacked http://en.wikipedia.org/wiki/Dehacked Todo lo que puede hacer es esperar que sea lo más difícil posible. –