2010-07-16 10 views
8

Me gustaría alojar el Dynamic Language Runtime (DLR) de tal forma que los usuarios que ejecuten scripts arbitrarios en él no puedan detener el proceso.¿Es posible alojar .Net DLR en un entorno limitado "a prueba de idiotas"?

El DLR hosting spec describe cómo alojar el DLR en un ApplicationDomain por separado. Esto permite derribar y descargar un tiempo de ejecución de script y restringir ciertas operaciones a través de CAS (por ejemplo, puedo restringir el acceso al sistema de archivos o no permitir el uso de la reflexión).

¿Pero también hay formas de, por ejemplo: - restringir la cantidad máxima de memoria utilizada por un script? - ¿restringe el número de subprocesos creados por un script? - ¿Detecta scripts bloqueados?

Creo que tal control de granularidad fina podría ser posible usando el unmanaged .net hosting API que fue desarrollado para el servidor SQL. ¿Es esta la dirección a seguir? ¿Hay proyectos de código abierto para este tipo de sandboxing general de .net?

Estas son algunas referencias potencialmente útiles que he encontrado:

Respuesta

3

echar un vistazo en Terrarium - es un juego donde construyes tus propios bichos autónomos en un lenguaje .NET, y son teletransportados a otros r Las computadoras en red junto con los ensamblajes en los que se describen. El objetivo es que su criatura se haga cargo de todo el ecosistema, ya sea matando a todo lo demás o administrando los recursos alimentarios de manera estratégica.

Como recuerdo, cualquier bicho que pase más de 0.n segundos "pensando" o n kb de memoria se borrará.

+0

Proyecto muy interesante. :-) Acabo de descargar la fuente e hice una revisión muy rápida: usan un código nativo del proyecto C++ llamado "asmcheck" para literalmente desensamblar un 'conjunto de criaturas' y verificar qué tipos de .net está usando/accediendo. Usan una lista negra codificada para "tipos prohibidos" como System.Threading.Thread. Aunque esta es una solución bastante interesante, creo que este enfoque no se puede aplicar directamente al DLR. – blueling

+0

¿De verdad? Eso es algo sorprendente. Siempre pensé que usaban CAS: http://en.wikipedia.org/wiki/Code_Access_Security –

Cuestiones relacionadas