Capítulo 8- Dominios de aplicación y servicios–Parte 1

 
Los dominios de aplicación permiten llamar a assemblies externos con la óptima eficiencia y seguridad.
Servicios son tipos especiales de assemblies que corren en el background (por detrás), no tienen interfaz de usuario y son controlados por herramientas especiales.

Lección 1 – Creando aplicaciones de dominio
 
A veces es necesario correr un assembly externo, pero cuando esto se realiza se puede caer un manejo ineficiente de recursos y en problemas de vulnerabilidad. Para evitar esto se crean dominios de aplicación.

Que es un dominio de aplicación?
Application Domain (dominio de aplicación) es un contenedor lógico que permite correr múltiples assemblies como un solo proceso, previniendo acceder directamente a la memoria de otros assemblies. Ofrece varias de las características de un proceso como: espacios separados de memoria y acceso a recursos, pero son más eficientes que estos, porque permiten a multiples assemblies correr en dominios de aplicación separados sin la necesidad de correr multiples procesos separados.
image
Un ejemplo de Application Domain es el IIS: si un sitio web es visitado por 10 personas, IIS va crear un dominio de aplicación para cada uno (ASP.NET corre 10 instancias separadas del assembly).
La mayoría del tiempo, en tiempo de ejecución dependemos del host para crear dominios de aplicación automáticamente para nuestros assemblies.
image
Se pueden configurar el comportamiento de los application domain usando herramientas como Internet Information Services Manager y el .NET Framework Configuration Tool.
Aspnet_wp.exe crea dominios de aplicación para aislar múltiples instancias de un assembly. Podemos crear nuestro propio application domain para llamar assemblies con riesgo de que el assembly pueda realizar una accion o acceder a cualquier recurso que no se ha especificado como permitido. Incluso, un Assembly puede almacenar varios Application Domain que almacenen assemblies.
Además de aislar un assembly ,los dominios de aplicación brindan confiabilidad y eficiencia:
  • Confiabilidad: para aislar tareas que pueden causar que un proceso termine. Si un appDomain se vuelve inestable, se descarga (unloaded) sin afectar el proceso. Esta técnica es útil cuando el proceso se debe correr por un largo periodo de tiempo sin volver a empezar, o cuando no comparte información.
  • Eficiencia: Si un assembly es cargado en el application domain por default, el assembly no puede ser descargado de memoria mientras el proceso esté corriendo. Esta técnica se usa para minimizar el trabajo de setear procesos de larga duración que ocasionalmente usan varios DLLs.
 
La clase AppDomain
En .Net , se usa el namespace System.AppDomain para manejar los dominios de aplicación, este contiene las siguientes propiedades y métodos:
Aclaración: coloco los que más se usan, pero es recomendable ver el link para conocer un poco más a esta clase.

ActivationContext obtiene el activation context del actual application domain
ApplicationIdentity Obtiene el identity de la aplicación en el appDomain.
ApplicationTrust describe permisos y si una aplicación es confiable o no.
BaseDirectory Obtiene el directorio base que el resolvedor de assemblies utiliza.
CurrentDomain obtiene el actual ApplicationDomain del Thread.
DomainManager
Obtiene el administrador de dominios que fue provisto por el host cuando el appDomain fue inicializado.
Evidence
Obtiene el Evidence asociado al appdomain que es usado para políticas de seguridad.
ApplyPolicy Devuelve el nombre del assembly después de que una política es aplicada.
CreateComInstanceFrom Crea una instancia de un tipo de COM.
CreateDomain Crea un nuevo appdomain.
 
Como crear un dominio de aplicación?
Para crear una appdomain, se debe llamar a una de las sobrecargas del método appDomain.CreateDomain
image
image
 
Como crear asemblies en un dominio de aplicación?
Crear un appdomain y cargar un assembly dentro de éste es igual de simple que lo anterior, se debe llamar al método ExecuteAssembly:
image
 
Como descargar un dominio de aplicación
Una de las ventajas de cargar assemblies en un dominio de aplicación es que se pueden descargar en cualquier momento para liberar recursos. Se realiza llamando al método AppDomain.Unload:
image
 
Lección 2 – Configurando dominios de aplicación
Se puede configurar dominios para crear entornos personalizados para assemblies. Lo más importante de modificar configuración por defecto es restringir permisos para reducir riesgos asociados con la seguridad.
 
Como usar un Applicaction Domain para lanzar assemblies con privilegios limitados?
Restringiendo los permisos de un dominio de aplicación se puede reducir el riesgo de que un assembly que llamemos realice alguna acción maliciosa.
Ejemplos de assemblies con privilegios limitados:
Defense-in-depth: es la seguridad principal para proveer múltiples niveles de protección, de esta forma se está protegido de una vulnerabilidad. Es muy importante cuando se ejecuta código externo.
 
Como proveer evidencias de hosteo para un assembly?
Cuando creamos un dominio de aplicación y lanzamos assemblies, tenemos completo control sobre la host evidence.
Evidence: es la información que se reúne en tiempo de ejecución sobre un assembly, para determinar que código agrupa. Su grupo de código, determina sus privilegios. Las evidencias más comunes incluyen carpetas o sitios web que el assembly corre e incluso firmas digitales.
Para proveer evidencia para un assembly, debemos crear un objeto system.Security.Policy.Evidence y después pasarlo como parámetro a una sobrecarga que tiene el application domain del metodo ExecuteAssembly.
image

Cuando se crea un objeto evidencia con el constructor que requiere 2 arreglos de objetos, uno representa los Evidence del host y el segundo, los del assembly. Un Evidence puede ser cualquier cosa, un string, un integer, una clase personalizada, etc.
La forma más simple de controlar permisos asignados a un assembly de un appdomain es pasarle la Zone evidence, de tipo System.Security.Policy.Zone y el enumerador System.Security.SecurityZone:
image
 
Como proveer evidencias de hosteo para un dominio de aplicación?
La técnica es similar a la de la evidencia para un assembly , usa una sobrecarga de AppDomain.CreateDomain que acepta un objeto Evidence (se debe referenciar a los namespaces System.Security y System.Security.Policy):
image

Como configurar las propiedades de un dominio de aplicación?
Se puede suministrar el common language runtime con información de configuración para un nuevo dominio de aplicación usando la clase AppDomainSetup.
Cuando uno crea su dominio de aplicación, la propiedad más importante es ApplicationBase.
Las otras propiedades del AppDomainSetup son usados por el host para configurar un particular appDomain. Cambiar las propiedades del AppDomainSetup no afecta a ningun AppDomain existente, solo a los que se crean después.

Acá les dejo el link para ver las propiedades y métodos de AppDomainSetup.

Para aplicar las diferentes propiedades a un dominio se debe crear un objeto AppDomainSetup y pasarla junto con el objeto evidence, al método AppDomain.CreateDomain.
image
 
Para examinar las propiedades del appdomain actual, se usa un objeto AppDomain.CurrentDomain.SetupInformation
image.



 ....................................................................................................................................................
2da parte >> 
.....................................................................................................................................................

No hay comentarios:

Publicar un comentario