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:
- Discover Techniques for Safely Hosting Untrusted Add-Ins with the .NET Framework 2.0
- Host protection hilo en la lista de discusión DLR
- Using Host Protection (blog de seguridad .Net)
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
¿De verdad? Eso es algo sorprendente. Siempre pensé que usaban CAS: http://en.wikipedia.org/wiki/Code_Access_Security –