- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
任何人都可以解释 SecurityAction 枚举值的含义和目的吗?
MSDN 页面不是很清楚。它说 LinkDemand 在即时编译时发生,而 Demand 在运行时发生。
为什么会有区别?在什么情况下我会使用 LinkDemand 而不是 Demand?
同样,其他有趣的值(如 InheritenceDemand、Assert 和 PermitOnly)的用例是什么。
最佳答案
LinkDemand 基本上要求调用代码具有指定的权限。另一方面,Demand 不仅要求调用代码具有指定的权限,而且还要求调用调用代码的代码和调用它的代码,等等,一直向上(或直到找到断言;见下文)。
LinkDemand 可以在 JIT 编译时强制执行,因为如果 JIT 编译器命中一个使用 LinkDemand 调用方法的语句,它可以立即确定调用代码是否有权限。每次对方法进行调用时,都必须在运行时强制执行需求,因为在编译时不可能知道任何给定调用期间堆栈上的内容。因此,LinkDemand 效率更高。然而,这种效率的代价是安全性较低。使用 LinkDemand,您相信调用代码不会让 ITS 调用代码(可能有也可能没有权限)将其用于恶意目的。 (换句话说,您相信调用代码中没有安全漏洞,调用者可以利用这些漏洞间接访问 LinkDemand 的方法。)通过 Demand,您知道堆栈上的每个人都绝对拥有权限(在至少直到找到断言为止),因此不存在来自不受信任的调用者的风险。
Assert 基本上是 Demand 的短路。如果堆栈上的调用方具有事件的 Assert(换句话说,只有堆栈中直到 Assert 的调用方必须具有权限),则随 Demand 发生的安全检查将停止。因此,与 LinkDemand 一样,您必须相信带有 Assert 的代码不会被其调用者利用。
Deny 也是 Demand 的短路,但它不是断言权限,而是取消调用者可能拥有的权限。您可以使用此功能通过确保在可能可被利用的调用期间没有有效的无关权限来帮助防止可能的安全漏洞。
PermitOnly 与 Deny 类似,不同之处在于它不是拒绝特定权限,而是拒绝除指定权限之外的所有权限。
InheritanceDemand 与其他方法不同,它与方法调用没有直接关系,但表示没有权限的类不能从具有 InheritanceDemand 的类继承。例如,这可以用来阻止不受信任的代码访问类的 protected 成员,否则这些成员可以被后代类访问。
关于.net - 了解 .NET 的 "SecurityAction"权限参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/353968/
任何人都可以解释 SecurityAction 枚举值的含义和目的吗? MSDN 页面不是很清楚。它说 LinkDemand 在即时编译时发生,而 Demand 在运行时发生。 为什么会有区别?在什么
我正在使用 Microsoft.Reporting.Webforms 版本 10 来解析 RDLC 文件并生成 PDF。 RDLC 是一个带有几个嵌入式表达式的简单发票。 当我运行应用程序时,我收到一
我有一个类归因于 [PrincipalPermission(SecurityAction.Demand, Authenticated = true)] public class MyProtecte
我有一个服务中的方法 [PrincipalPermission(SecurityAction.Demand, Role = "ADMIN")] public UserInfo GetUserI
最近,我们的 .Net 客户端 libaray 正在升级以针对 Net 4.0 进行编译。 将目标框架更改为4.0后,应用程序出现一些编译错误。 在 AssemblyInfo.cs : [assemb
从 .NET 3.5 升级某些 ASP.NET 代码时,我收到以下编译警告作为错误: “System.Security.Permissions.SecurityAction.RequestMinimu
我是一名优秀的程序员,十分优秀!