gpt4 book ai didi

c# - 如何使用 ReflectionPermission 拒绝反射

转载 作者:IT王子 更新时间:2023-10-29 04:44:47 27 4
gpt4 key购买 nike

我正在尝试在我的应用程序中添加插件,但我根本不希望插件使用反射,插件代码可以是使用应用程序域的沙箱。

我找到了一个 AppDomain example在 MSDN,但没有 ReflectionPermision 的任何引用,而且 Deny 安全属性已贬值,许多属性已贬值,那么我该如何停止反射?

最佳答案

要使用 AppDomain.CreateDomain 创建沙盒应用程序域,您应该传入一个 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 article 中描述了这两种方法您在问题中提到的内容。

关于c# - 如何使用 ReflectionPermission 拒绝反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7304016/

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