我指的是“Sandbox Ironpython”。
我对原始海报的要求有些不同:
具体来说,我们需要限制不同的功能 - 文件系统访问是可以的,大多数标准的python模块也没问题,但是只允许一些显式的.NET dll(我们希望将python脚本限制为我们提供的“官方”API)。 AFAIC,这需要挂钩python import语句的实现。
有什么方法可以实现这个目标吗?
提前致谢!
答案 0 :(得分:4)
是的,AppDomains是唯一的方法。如果您通过.NET沙箱限制访问,那么您可以使用标准库执行的任何操作都将受到适当限制。那么为什么要限制任何Python脚本呢?他们不能做任何你不允许的事情。
答案 1 :(得分:1)
我发布此信息是为了防止他人浪费我所做的那么多时间。
来自CLR安全团队的高级开发人员,以回应您尝试使用os.py时会发生什么:
“正在抛出repro示例中的SecurityException,因为IronPython中的安全透明代码正在调用安全关键代码(GCHandle.Free),这导致了对Unrestricted权限的需求。”
无法为其提供所需的权限:
“没有一组权限可以累加到PermissionState.Unrestricted”
即使您可以使用它,AppDomain沙盒也毫无价值:
“就沙箱不受信任的代码而言,很快,我们将发布新的指导,即部分信任不应被用作安全边界。完整的指导是: “.NET Framework提供了一种机制,用于对在称为代码访问安全性(CAS)的同一应用程序中运行的不同代码实施不同级别的信任。不应将.NET Framework中的代码访问安全性用作具有部分受信任代码的安全边界,尤其是源自未知的代码。我们建议不要在不采用其他安全措施的情况下加载和执行未知来源的代码。“