有没有办法在我使用完后禁用导入?我正在使用IronPython作为脚本引擎,我不希望用户能够导入任何东西。这可以通过使用setfenv:
在LuaInterface中完成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)
或者在解析脚本文件之前将导入函数设置为nil:
luanet.load_assembly = nil
luanet.import_type = nil
这可以在IronPython中使用吗?
答案 0 :(得分:0)
一种选择是预先检查您正在执行的脚本,并禁止任何包含import
语句(或from ... import
语句)的脚本。
foreach(line in script) {
if(line.TrimeStart().StartsWith("import") || line.TrimeStart().StartsWith("from") {
throw ...;
}
}
这不是万无一失的(__import__
仍然是一个问题),但它将覆盖绝大多数情况。
答案 1 :(得分:0)
您可以为导入功能创建一个钩子,并且无论如何都要处理用户导入。
在你的情况下,你可以为钩子获得的任何导入返回null。
在此解释了如何执行此操作:https://stackoverflow.com/a/4127766/448547