【问题标题】:How can I restrict an assembly's security permissions, but not those of its callees?如何限制程序集的安全权限,但不能限制其被调用者的安全权限?
【发布时间】:2011-01-07 17:30:29
【问题描述】:

我允许我的应用程序的用户运行 C# 的 sn-ps 以便能够直接操作我的程序集中的某些对象,而无需编写一个大型脚本接口层来显式公开所有内容。

此代码将被注入到动态编译的程序集中,因此我可以控制程序集本身,但我需要停止使用反射访问我的私有方法的代码。

我尝试在运行代码之前调用 securityPermissionObject.Deny(),但这会阻止我的对象上的方法在用户代码调用它们时使用反射(有些会这样做)。

有没有办法只限制可疑程序集的权限而不影响它在我的受信任程序集上调用的公共方法?

【问题讨论】:

    标签: c# .net security cas


    【解决方案1】:

    尝试创建一个新的应用程序域。并将其用作沙箱。在这个沙箱中,你可以加载你的程序集。

    Here 就是一个例子。

    当然,因为您现在有两个应用程序域,所以通信有点复杂。您可以考虑通过管道或其他通信机制实现 Web 服务。

    Here 是一篇关于两个应用域如何通信的文章。

    【讨论】:

    • 这似乎是控制权限限制的唯一可行方法,但遗憾的是它需要通过某种形式的通信明确地将每个安全方法暴露在沙箱之外。
    【解决方案2】:

    (一个老问题,不知道你是否还需要答案)

    当调用返回到您的公共方法时,您需要做的第一件事就是仔细清理参数,并拒绝任何错误调用。之后,您可以为RelectionPermission 添加对Assert 的调用。这基本上允许您调用的任何需要反射的代码都得到满足,并且不会在调用堆栈中看到更高的拒绝。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-25
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      相关资源
      最近更新 更多