使用自定义冲突解决程序时,程序集不允许部分受信任的调用程序

本文关键字:程序 不允许部 信任 调用 程序集 自定义 冲突 解决 | 更新日期: 2023-09-27 18:23:43

我在内联网上有一个程序集调用内联网上的另一个库(在不同的文件夹中),该库然后调用安装在本地计算机GAC中的Microsoft HPC API。

程序集使用MS KB 837908中的方法找到库,在此过程中引发SecurityException"该程序集不允许部分受信任的调用方"(该程序集是HPC API)

但是,如果我将库移动到intranet上与执行程序集相同的文件夹中(即无需调用自定义解析器),则一切都可以正常工作。

如何改进自定义解析程序以避免此安全异常?

使用自定义冲突解决程序时,程序集不允许部分受信任的调用程序

引发SecurityException"该程序集不允许部分受信任的调用方"

这是一件好事。如果程序集未标记有Allow Partially Trusted Callers属性,这意味着(1)该程序集的作者从未执行过安全审查,以查看被部分受信任的恶意代码调用是否安全,或者(2)确实执行了安全审查,并且确实确定该程序集被部分受信的恶意代码调用不安全。

这个异常是为了保护你的用户免受伤害,所以你应该为它被抛出而感到高兴。

但是,如果我将库移动到intranet上与执行程序集相同的文件夹中,则一切都可以正常工作。

好吧,听起来你已经解决了你的问题。

如何改进自定义解析程序以避免此安全异常?

您在问如何绕过一个正常工作的安全系统来保护您的用户免受部分受信任的恶意代码的攻击?你到底为什么要那样做?如果你能成功地做到这一点,我希望你能告诉微软,这样我们就可以修复错误阻止你这样做

不要在安全系统周围工作;使用安全系统。如果问题是您正在调用一个需要完全信任调用方的组件,那么(1)不要调用该组件,或者(2)指示用户设置完全信任该调用方的策略。

Hans Passant在评论中提供了这个解决方案,我已经向他提出了提供正式答案的提议,我很乐意接受。

使用问题中链接的Microsoft KB示例更改

MyAssembly = Assembly.LoadFrom(strTempAssmbPath);

Assembly.LoadFrom(strTempAssmbPath, Assembly.GetExecutingAssembly().Evidence)