IronPython - 如何阻止导入CLR(及其他模块)
我正在搭建一个网页应用程序,打算用IronPython来处理用户的各种操作。我会把一些业务对象暴露出来,方便脚本访问。我希望用户无法导入CLR或其他库,这样可以让脚本的功能保持简单,只能使用我在业务对象中提供的功能。
我该怎么做才能阻止用户导入CLR和其他库/模块呢?
5 个回答
1
你可能想要使用微软的代码访问安全来实现保护。我自己对它的工作原理不是很了解(或者说怎么和IPy一起使用),但我觉得这是你应该考虑的一个选项。
还有一个IPy邮件列表上的讨论串,你可以去看看。那里的问题和你的问题类似。
2
这样做会阻止导入Python模块和.Net对象,所以这可能不是你想要的结果。(我对Python还比较陌生,所以可能也有遗漏的地方):
首先,设置好环境。
导入用户需要访问的任何东西。
然后可以在他们的脚本前面加上代码,或者直接执行:
__builtins__.__import__ = None #Stops imports working
reload = None #Stops reloading working (specifically stops them reloading builtins
#giving back an unbroken __import___!
接着执行他们的脚本。
1
你需要在脚本中查找那些你不想让他们使用的导入,如果发现有这些导入,就直接拒绝这个脚本。
简单来说,如果脚本里有 Assembly.Load、import 或 AddReference 这些内容,就拒绝这个脚本。