如何使用ReflectionPermission拒绝反射

本文关键字:反射 拒绝 ReflectionPermission 何使用 | 更新日期: 2023-09-27 18:07:24

我试图在我的应用程序中添加插件,但我不想让插件使用反射,插件代码可以使用应用程序域沙箱。

我在MSDN上找到了一个AppDomain的例子,但没有任何refectionpermission的引用,而且Deny安全属性也贬值了,很多属性都贬值了,我该如何停止反射呢?

如何使用ReflectionPermission拒绝反射

使用AppDomain。要创建沙盒应用域,您应该传入一个PermissionSet,其中只包含您想要授予沙盒程序集的权限。如果您不想授予ReflectionPermission,则不应该将其添加到权限集中。

也就是说,ReflectionPermission并不是唯一应该拒绝给通用源外接程序的"危险"权限。如果你想要非常严格,你可以考虑只授予SecurityPermission'Execution。:

PermissionSet permissionSet = new PermissionSet(PermissionState.None);
permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));

如果您想包含额外的"安全"权限,您可以简单地使用额外的AddPermission调用将它们添加到权限集中。如果您想要包含在已弃用的CAS策略系统下被认为足够安全的、可以授予来自internet的代码的所有权限,您可以通过将internet区域证据传递给SecurityManager来提取这些权限。GetStandardSandbox静态方法。:

Evidence evidence = new Evidence();
evidence.AddHostEvidence(new Zone(SecurityZone.Internet));
PermissionSet permissionSet = SecurityManager.GetStandardSandbox(evidence);

注意::这两种方法在您的问题中提到的MSDN文章中都有描述。

根据文档,ReflectionPermission是您授予代码访问私有和受保护成员的权限。默认情况下,它不被授予,代码只能访问公共成员。如果您试图隐藏公共成员,则需要创建一个不公开它们的新接口。