我正在实现一个将加载并执行第 3 方代码的应用程序。
虽然 .NET 沙盒很好,但我找不到阻止代码启动新线程的方法。
这是一个问题,因为据我所知,我们无法安全地枚举和中止它们以卸载沙箱 AppDomain - 我们必须退出整个过程。
如何禁止 Thread.Start 或(更好)白名单/黑名单特定的 CLR API?
最佳答案
您需要创建脚本环境而不是运行已编译的代码。在这种环境中,您可以解析出不支持/不需要的关键字。
http://msdn.microsoft.com/en-us/library/ms974577.aspx
http://osherove.com/blog/2004/2/17/make-your-net-application-support-scripting-a-practical-appr.html
http://www.codeproject.com/KB/library/Dotnet_Scriptor.aspx
可能有某种方法可以限制在 AppDomain 中运行的代码的权限,这就是您所说的沙箱吗?
Good example of use of AppDomain
如果 cpu 和内存发生“坏事”,您可能会强制卸载 AppDomain。
最近在 .net 4 中,我注意到但没有调查 HostProtection Permissions ...
System.Security.Permissions hostprotectionattribute
===编辑===
看起来设置安全权限的 CLR 托管将是正确的选择。链接...
http://msdn.microsoft.com/en-us/library/hbzz1a9a(v=vs.90).aspx
http://msdn.microsoft.com/en-us/library/h846e9b3(v=vs.90).aspx
http://msdn.microsoft.com/en-us/library/system.security.permissions.securitypermission(v=vs.90).aspx
关于c# - 防止不受信任的 C# 代码启动新线程或黑名单/白名单 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5508712/