gpt4 book ai didi

c# - 沙箱 AppDomain 跨程序集异常处理

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:23 24 4
gpt4 key购买 nike

我在沙盒应用程序域中遇到一些异常问题。在沙箱中运行的代码是安全透明的。我有一个实用程序 dll,它允许部分受信任的调用方,并为沙盒代码提供功能。它的方法是 SecuritySafeCritical。一切正常,直到出现异常。

在沙箱中运行的代码受到 try-catch block 的保护,因此即使 ti 抛出它也不会关闭应用程序。

如果安全透明 dll 中的代码抛出异常,则一切正常。但是,如果沙盒代码调用受信任的实用程序 dll 中的方法,并且该代码抛出异常,则会发生以下情况:

如果我在调试器中,调试器会中断:

An exception of type 'Blah' occurred in Trusted.dll but was not handled in user code

这本身没问题,但我的 try-catch block 捕获的异常不是“Blah”类型,而是:

[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”。

我的问题:我该如何处理这个案例?有没有办法让它以“干净”的方式工作(异常从受信任的 - 部分 - 受信任的代码一路传播),如果是这样,如何以安全的方式工作? (显然我不想盲目地断言权限,而不还原它们!)

我有一个回退解决方案(我在我信任的助手中记录异常,抛出它,捕获安全异常,重新抛出原始异常)但我想知道是否有一个更干净的解决方案“符合规则”而不是弯曲它们。

如果我对跨汇编异常处理的猜测是正确的!

最佳答案

所以,结果是 heisenbug ,或者它的反面......

仅当我在调试器中运行我的代码时才会出现此问题。似乎沙箱不喜欢在调试器中中断异常然后恢复它的行为。在调试器之外,一切都按预期工作,前提是您做了功课(该程序集是受信任的并添加到域受信任的程序集列表中,它允许部分受信任的调用者等。)

还有一个问题值得指出:如果要保存异常并报告给调用的appdomain,异常必须是[Serializable]。然而 System.ExceptionISerializable,因此您需要实现序列化构造函数(BlahException (SerializationInfo info, StreamingContext context) 并将参数向下传递到基地()

关于c# - 沙箱 AppDomain 跨程序集异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27077789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com