c# - 防止不受信任的 C# 代码启动新线程或黑名单/白名单 API

标签 c# multithreading security sandbox

我正在实现一个将加载并执行第 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 托管将是正确的选择。链接...

What is CLR hosting?

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/

相关文章:

c# - 枚举有什么意义?

c# - String 和 Double 的非常奇怪的问题

c# - 如何获得枚举标志值的最短表示?

c - 从线程向我的主信号发出信号?

c++ - 以编程方式获取与 htop 的相应 pid 匹配的进程的线程 Id

android - 混淆 Activity 名称的解决方法

c# - typeof(_Default) 使用 Log4Net 时出错

c++ - 列表和多线程环境

sql-server - 附加数据库时访问被拒绝

python - Web应用程序用户名安全