gpt4 book ai didi

c# - 关于代码访问安全与无法验证代码的混淆

转载 作者:太空狗 更新时间:2023-10-29 21:52:42 25 4
gpt4 key购买 nike

我很困惑我需要做什么才能正确“设置”我无法验证的方法,使其符合代码访问安全准则。


给定以下方法

[MethodImpl(MethodImplOptions.ForwardRef)]
private extern void DoStuffUnverifiable();

PEVerify 认为无法验证,我绝对需要将哪些属性应用于方法定义?

  • [SecurityCritical]
  • [SecuritySafeCritical]?

我如何在这两者之间做出选择?进一步,

  • 我是否需要设置 [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
  • 如果是这样,我是使用 SecurityAction.Demand 还是其他什么?

是否有任何其他属性是我绝对需要应用的?有什么我可以申请的,虽然不是必需的?

最佳答案

在透明模型中,安全关键方法用[SecurityCritical] 属性标记:

[SecurityCritical]
public Key GetTVRoomKey() { ... }

所有“危险”方法(包含 CLR 认为可能破坏安全并允许犯人escape) 必须用 [SecurityCritical][SecuritySafeCritical] 标记。这包括:

  • 无法验证(不安全)的方法
  • 通过 P/Invoke 或 COM 互操作调用非托管代码的方法

  • 断言权限或调用链接要求方法的方法

  • 调用 [SecurityCritical] 方法的方法

  • 覆盖虚拟 [SecurityCritical] 方法的方法

[SecurityCritical] 表示“此方法可能允许部分受信任的调用者逃离沙箱”。[SecuritySafeCritical] 意思是“这个方法做安全关键的事情——但有适当的保护措施因此对于部分信任的调用者来说是安全的”。


所以是的,在您的情况下 - [SecurityCritical] 肯定是必需的,如果您想要额外的安全性,请使用 [SecuritySafeCritical]

关于c# - 关于代码访问安全与无法验证代码的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56244374/

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