2010-11-15 45 views
1

我允许我的应用程序用户运行C#代码片段,以便能够直接操作我的程序集中的某些对象,而无需编写大型脚本界面层来显式公开所有内容。如何限制程序集的安全权限,但不限制其被调用者的权限?

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

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

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

回答

1

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

Here就是一个例子。

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

Here是两篇appdomains如何沟通的文章。

+0

这似乎是控制权限限制的唯一可行的方法,只是一个耻辱,它需要用某种通信方式明确公开沙箱外的每个安全方法。 – mentlegen 2011-01-27 12:40:47

0

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

当通话回来到您的公共方法,那么你需要做的第一件事是仔细消毒参数,并拒绝任何不良调用。之后,您可以拨打Assert加入RelectionPermission。这基本上允许你调用的任何需要反射的代码得到满足,而不会在调用堆栈中看到更高的Deny。