2011-05-12 12 views
27

Je cherche un moyen d'exécuter un code Haskell arbitraire en toute sécurité (ou refuse d'exécuter du code dangereux).Exécution en toute sécurité d'un code Haskell non approuvé

doit avoir:

  • module/fonction whitelist
  • délai d'attente
  • sur l'exécution
  • restriction utilisation de la mémoire

Capabilities Je comme voir:

  • capacité à tuer fil
  • compilation des modules en code natif
  • mise en cache du code compilé
  • exécutant plusieurs interprètes en même temps
  • type de données complexes pour les erreurs du compilateur (insted de message simple dans la chaîne)

Avec ce genre de fonctionnalité, il serait possible d'implémenter un plugin de navigateur capable d'exécuter du code Haskell arbitraire, ce qui est l'idée que j'ai en tête.

EDIT: J'ai deux réponses, les deux géniales. Merci! Le plus triste est qu'il ne semble pas y avoir de bibliothèque prête à l'emploi, juste un programme similaire. C'est une ressource utile cependant. Quoi qu'il en soit, je pense que je vais attendre la sortie de la version 7.2.1 et essayer d'utiliser SafeHaskell dans mon propre programme.

Répondre

31

Nous avons fait cela depuis environ 8 ans maintenant lambdabot, qui soutient:

  • un espace de noms contrôlé
  • OS renforcé les délais d'attente
  • modules de code natif
  • cache
  • principaux niveaux interactifs concurrents
  • message d'erreur personnalisé renvoyé.

Cette série de règles est documenté, voir:

L'approche de sécurité prises dans lambdabot a inspiré le travail d'extension de langue Safe Haskell.


Pour les approches à l'extension dynamique des applications Haskell compilées, en Haskell, voir les deux documents:

+0

J'accepte la réponse parce que plus de gens ont voté pour celui-ci. La réponse de Simon est géniale aussi. Merci pour les réponses! – Tener

+0

Les deux liens en bas ne fonctionnent pas. –

26

GHC 7.2.1 aura probablement une nouvelle installation appelée SafeHaskell qui couvre une partie de ce que vous voulez. SafeHaskell assure la sécurité de type (donc les choses comme unsafePerformIO sont interdites), et établit un mécanisme de confiance, de sorte qu'une bibliothèque avec une API sûre mais implémentée en utilisant des fonctionnalités non sécurisées puisse être approuvée. Il est conçu exactement pour exécuter du code non fiable. Pour les autres aspects pratiques (délais d'attente, etc.), lambdabot, comme le dit Don, serait un bon endroit pour regarder.

+0

Quelle partie de la proposition SafeHaskell sera implémentée en 7.2.1? Le tout? – Tener

+0

David Terei a implémenté les parties du compilateur de SafeHaskell, le correctif est en attente dans ma file d'attente de révision. Le reste est en train de modifier le package de base et les autres bibliothèques pour utiliser Safe et Trustworthy, selon le cas. David travaille sur cette partie en ce moment. Je pense que SafeHaskell sera disponible dans un état expérimental en 7.2.1. –

+0

@ Simon Marlow C'est une nouvelle vraiment intéressante, merci. – Tener

Questions connexes