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:
- Discover Techniques for Safely Hosting Untrusted Add-Ins with the .NET Framework 2.0
- fil Host protection sur la liste de discussion de DLR
- Using Host Protection (blog de sécurité .Net)
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
Vraiment? C'est un peu surprenant. J'ai toujours pensé qu'ils utilisent CAS: http://en.wikipedia.org/wiki/Code_Access_Security –