我在沙盒应用程序域中遇到了一些异常问题。 在沙箱中运行的代码是安全透明的。 我有一个实用的dll,它允许部分信任的调用者,并为sanboxed代码提供功能。它的方法是SecuritySafeCritical。 一切运作良好,直到我们遇到例外。沙盒AppDomain交叉程序集异常处理
在沙箱中运行的代码受try-catch块的保护,所以如果ti抛出它不会导致应用程序关闭。
如果安全trasparent dll中的代码抛出异常一切正常。但是,如果沙盒代码调用受信任程序的DLL的方法,那代码抛出,将发生以下情况:
如果我在调试器,调试器符:
An exception of type 'Blah' occurred in Trusted.dll but was not handled in user code
这本身就是OK,但随后的异常由我try-catch块捕获的类型不是“胡说”,但它是:
[System.Security.SecurityException] = {"Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed."}
我的猜测是,这从一个值得信赖的组件部分信任例外“泄漏”代码是一个安全问题。我的第二个猜测是,这被认为是一个问题,因为它们之间的部分可信代码可能会捕获异常,这可能会导致安全问题,从而阻止传播。 什么是不明白的是,当框架实际上试图断言导致上述异常的“SecurityPermission”引发。
我的问题:我该如何处理这种情况?有没有办法让它以“干净”的方式工作(例外情况是从可信 - 部分 - 可信代码开始),如果是这样,以一种安全的方式? (显然我不想盲目地声明权限,而不会将它们还原!)
我有一个后备解决方案(我在我的信任助手中记录异常,将其抛出,捕获安全异常,重新抛出原始异常)但我想知道是否有一个更“清晰”的解决方案,而不是弯曲它们。
而且如果我对交叉装配异常处理的猜测是正确的!