Ejecución segura de código Haskell no confiable


Estoy buscando una manera de ejecutar un código arbitrario de Haskell de forma segura (o negarse a ejecutar código inseguro).

Debe tener:

  • lista blanca de módulos/funciones
  • tiempo de espera en la ejecución
  • restricción de uso de memoria

Capacidades Me gustaría como para ver:

  • capacidad para matar hilo
  • compilando los módulos a código nativo
  • almacenamiento en caché del código compilado
  • ejecutar varios intérpretes simultáneamente
  • complejo tipo de datos para errores de compilador (insted de mensaje simple en cadena)

Con ese tipo de funcionalidad sería posible implementar un plugin de navegador capaz de ejecutar código Haskell arbitrario, que es la idea que tengo en mente.

EDIT: Tengo dos respuestas, ambas geniales. ¡Gracias! La parte triste es que no parece estar lista para ir biblioteca, solo un programa similar. Sin embargo, es un recurso útil. De todos modos creo que voy a esperar a 7.2.1 para ser liberado y tratar de usar SafeHaskell en mi propio programa.

Author: Tener, 2011-05-12

2 answers

Hemos estado haciendo esto durante unos 8 años en lambdabot , que soporta:

  • un espacio de nombres controlado
  • Tiempos de espera forzados por el sistema operativo
  • módulos de código nativo
  • almacenamiento en caché
  • niveles superiores interactivos concurrentes
  • devuelve un mensaje de error personalizado.

Esta serie de reglas está documentada, ver:

El enfoque de seguridad adoptado en lambdabot inspiró el trabajo de extensión de lenguaje Safe Haskell.


Para aproximaciones a la extensión dinámica de aplicaciones compiladas de Haskell, en Haskell, ver los dos documentos:

 31
Author: Don Stewart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-12 03:30:58

GHC 7.2.1 probablemente tendrá una nueva instalación llamada SafeHaskell que cubre algo de lo que desea. SafeHaskell garantiza la seguridad de tipo (por lo que cosas como unsafePerformIO están prohibidas), y establece un mecanismo de confianza, de modo que una biblioteca con una API segura pero implementada utilizando características inseguras puede ser de confianza. Está diseñado exactamente para ejecutar código no confiable.

Para los otros aspectos prácticos (tiempos de espera y así sucesivamente), lambdabot como Don dice sería un gran lugar para buscar.

 26
Author: Simon Marlow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-12 06:20:28