2009-12-05 7 views
0

Y at-il un moyen de désactiver l'utilisation de l'importation une fois que j'ai fini de l'utiliser? J'utilise IronPython comme moteur de script et je ne veux pas que les utilisateurs puissent importer quoi que ce soit. Cela pourrait se faire en LuaInterface par l'utilisation de setfenv:IronPython disable Importer après utilisation

luanet.load_assembly("System.Windows.Forms") 
luanet.load_assembly("System.Drawing") 

Form=luanet.import_type("System.Windows.Forms.Form") 

-- Only allow the use of the form class 

local env = { Form = _G.Form } 

setfenv(1, env) 

ou en définissant les fonctions d'importation à zéro avant d'analyser le fichier script:

luanet.load_assembly = nil 
luanet.import_type = nil 

Est-ce possible dans IronPython?

Répondre

0

Une option consiste à pré-vérifier les scripts que vous exécutez et d'interdire ceux qui ont des instructions import (ou des instructions from ... import).

foreach(line in script) { 
    if(line.TrimeStart().StartsWith("import") || line.TrimeStart().StartsWith("from") { 
     throw ...; 
    } 
} 

Il est pas à toute épreuve (__import__ est toujours un problème), mais il couvrira la grande majorité des cas.

0

Vous pouvez créer un accrochage à la fonction d'importation et gérer l'importation de l'utilisateur comme vous le souhaitez.

Dans votre cas, vous pouvez simplement retourner null pour toute importation que votre crochet obtient.

Il a été expliqué comment le faire ici: https://stackoverflow.com/a/4127766/448547