- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个应用程序域来托管不受信任的代码/程序集。我用安全属性解决了所有安全问题,而且效果很好。不受信任的代码在专用线程上运行。 CLR 是 2.0。这就是我的AppDomainShell AppDomainSeed , Shell 在主域中运行,seed 是不受信任域中的受信任代理/助手。
我有兴趣限制创建新线程和更改优先级。目前,我不受信任的程序集可以设置 ThreadPriority.Highest 或通过创建 10k 线程来终止操作系统。有 SecurityPermissionFlag.ControlThread但这只会阻止像 Abort() 这样的高级操作。
我正在查看 Thread 类实现,对于那些简单的操作,它的 C# API 没有声明性安全性,其余实现是 native 的。
我想我可以使用一些 Win32 函数在操作系统级别禁止它。但是操作系统如何识别不受信任的线程/代码/程序集? SetThreadPrincipal() ?
有没有可能被滥用的 CLR API?我更喜欢无需安装且可移植到 Mono 的解决方案,:-/嗯。
欢迎任何其他想法。谢谢!
最佳答案
我正在考虑另一种解决方案。不可信程序集CIL的静态分析。我可以搜索所有方法、属性、构造函数。识别对类型的引用。如果我找到对 Thread 类型的引用,我将抛出安全异常并卸载程序集。
我非常喜欢 Jb Evain 的作品。他创造了 Mono Cecil ,但这是相当重量级的。他还起草了CIL reader ,仅使用 .NET 反射。
我创建了 Linq over reflection使用 CIL 阅读器。用法如下所示。
var myAssembly = typeof (Program).Assembly;
foreach (Type usedType in myAssembly.GetUsedTypes())
{
if (typeof (Thread).IsAssignableFrom(usedType) ||
typeof (ThreadPool).IsAssignableFrom(usedType) ||
typeof (ThreadPriority).IsAssignableFrom(usedType)
)
{
throw new SecurityException("Thread usage is banned here!");
}
}
关于c# - 沙盒 AppDomain 中的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1986965/
我是一名优秀的程序员,十分优秀!