我在Intranet上有一个程序集调用Intranet上的另一个库(在另一个文件夹中),然后调用安装在本地计算机GAC中的Microsoft HPC API。
程序集使用MS KB 837908中的方法查找库,并在此过程中引发SecurityException“该程序集不允许部分信任的调用者”(该程序集是HPC API)
但是,如果我将内部网上的同一文件夹中的库作为执行程序集移动(即不需要调用自定义解析程序),则一切正常。
如何改进自定义解析程序以避免此安全例外?
答案 0 :(得分:3)
引发SecurityException“该程序集不允许部分信任的调用者”
这是件好事。如果程序集未使用“允许部分受信任的调用者”属性进行标记,则表示(1)该程序集的作者从未执行过安全性审核以查看是否可以安全地被恶意部分调用受信任的代码,或者(2)确实执行了安全性审查,并且确实确定该组件不被安全的部分受信任的代码调用。
此例外可以保护您的用户免受伤害,因此您应该对它被抛出感到高兴。
但是,如果我在Intranet上的同一文件夹中移动库作为执行程序集,那么一切正常。
那么,听起来你已经解决了问题。
如何改进自定义解析程序以避免此安全例外?
您要求如何解决正在运行的保护用户免受恶意部分受信任代码攻击的安全系统?为什么你想要这样做呢?如果你能成功地做到这一点,我希望你能告诉微软有关它,以便我们修复错误和阻止你这样做。
不要围绕安全系统工作;使用安全系统工作。如果问题是您正在调用需要完全受信任的调用者的组件,则(1)不调用该组件,或者(2)指示您的用户设置完全信任调用者的策略。
答案 1 :(得分:3)
Hans Passant在评论中提供了这个解决方案,我向他提出了一个提供正式答案的建议,我很乐意接受它。
使用关联的Microsoft KB示例更改
MyAssembly = Assembly.LoadFrom(strTempAssmbPath);
到
Assembly.LoadFrom(strTempAssmbPath, Assembly.GetExecutingAssembly().Evidence)