2010-07-16 12 views
8

Je souhaite héberger le Dynamic Language Runtime (DLR) de manière à ce que les utilisateurs qui exécutent des scripts arbitraires ne puissent pas arrêter le processus.Est-il possible d'héberger le .Net DLR dans un sandbox "idiot-proof"?

Le DLR hosting spec décrit comment héberger le DLR dans un domaine d'application distinct. Cela permet de supprimer et de décharger une exécution de script et de restreindre certaines opérations via CAS (par exemple, je peux restreindre l'accès au système de fichiers ou interdire l'utilisation de la réflexion). Par exemple: - limite la quantité maximale de mémoire utilisée par un script? - limiter le nombre de threads créés par un script? - détecter les scripts bloqués?

Je pense qu'un tel contrôle granulaire pourrait être possible en utilisant le unmanaged .net hosting API qui a été développé pour le serveur SQL. Est-ce la direction à suivre? Existe-t-il des projets open source pour ce type de sandboxing .net général?

Voici quelques potentiellement des références utiles que je trouve:

Répondre

3

un coup d'oeil au Terrarium - c'est un jeu où vous construisez vos propres créatures autonomes dans un langage .NET, et ils sont téléportés pour othe r les ordinateurs en réseau ainsi que les assemblées dans lesquelles ils sont décrits. Le but est de faire en sorte que votre créature prenne en charge tout l'écosystème, soit en tuant tout le reste, soit en gérant stratégiquement les ressources alimentaires. Si je me souviens, toute créature qui passe plus de 0.n secondes «penser» ou n kb de la mémoire est supprimée.

+0

Projet très intéressant. :-) Je viens de télécharger la source et j'ai fait une critique rapide: Ils utilisent un projet C++ natif appelé "asmcheck" pour démonter littéralement un 'assembly de créature' et vérifier quels types de .net il utilise/access. Ils utilisent une liste noire codée en dur pour les "types interdits" comme System.Threading.Thread. Bien que ce soit une solution assez intéressante, je pense que cette approche ne peut pas être directement appliquée au DLR. – blueling

+0

Vraiment? C'est un peu surprenant. J'ai toujours pensé qu'ils utilisent CAS: http://en.wikipedia.org/wiki/Code_Access_Security –