IronPython - 如何防止导入CLR(和其他模块)

时间:2009-09-25 20:33:17

标签: python ironpython

我正在设置一个Web应用程序来使用IronPython来编写各种用户操作的脚本,我将公开可供脚本访问的各种业务对象。我想让用户无法导入CLR或其他程序集,以保持脚本的功能简单,并限制在我的业务对象中公开的功能。

如何阻止导入CLR和其他程序集/模块?

5 个答案:

答案 0 :(得分: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 :(得分:1)

您必须在脚本中搜索您不希望他们使用的导入,并且如果脚本中包含任何脚本,则拒绝该脚本。

基本上,如果脚本包含Assembly.Load,import或AddReference,则拒绝该脚本。

答案 2 :(得分:1)

您可能希望使用Microsoft's Code Access Security实施保护。我自己并不完全了解它的工作原理(或者如何使它与IPy一起工作),但我觉得你应该考虑它。

您可能需要查看discussion thread on the IPy mailing list。提出的问题与您的问题相似。

答案 3 :(得分:0)

如果您想禁用某些内置模块,我建议您在ironpython.codeplex.com上提交功能请求。这应该是一件很容易实现的事情。

否则您只需查看Importer.cs并禁止导入,或者您只需从IronPython中删除ClrModule.cs并重新构建(并可能删除对它的任何引用)。

答案 4 :(得分:0)

万一有人仍然碰到Google的这个线程(就像我一样) 我通过注释掉该行来禁用了python脚本中的'import clr'

// [程序集:PythonModule(“ clr”,typeof(IronPython.Runtime.ClrModule))]

在ClrModule.cs中,但是我不认为这是防止不必要访问的完整解决方案,因为您仍然需要覆盖内置文件之类的东西。