c# 没有非托管权限的无法验证的代码
Posted
技术标签:
【中文标题】c# 没有非托管权限的无法验证的代码【英文标题】:c# unverifiable code without unmanaged permission 【发布时间】:2012-06-07 15:09:41 【问题描述】:我有一个 .net 程序集,其方法无法验证。
我正在尝试将此程序集加载到沙盒应用程序域中。
如果我使用跳过验证加载,而不是使用非托管加载,我会收到验证异常。像这样:
new SecurityPermission(SecurityPermissionFlag.Execution |
SecurityPermissionFlag.SkipVerification);
如果我使用非托管权限加载它可以工作,但应用程序域将不够“沙盒”。
new SecurityPermission(SecurityPermissionFlag.Execution |
SecurityPermissionFlag.SkipVerification |
SecurityPermissionFlag.UnmanagedCode);
另外 - 我正在运行 .Net 4,为了使上述内容正常工作,我必须切换到 transperancy 模型级别 1,如下所示:
[assembly:SecurityRules(SecurityRuleSet.Level1)]
所以,我的问题是:
-
有没有办法在没有 UnamangeredCode 权限的情况下运行未经验证的代码。
有没有办法使上述内容与 Level2 安全规则集一起使用。
谢谢!
【问题讨论】:
应用程序要么是沙盒,要么不是。那么“沙盒不够”到底是什么意思呢?听起来您需要获得可验证的程序集,而不是尝试创建解决方法。 在这个沙箱中,我需要保护用户免受他自己的伤害,而不是针对一些潜在的威胁。这就是为什么我不担心无法验证的代码。但我担心非托管代码。无论如何,由于我使用了一些 .net 框架,我无法对其进行验证。 【参考方案1】:有没有办法在没有 UnamangedCode 的情况下运行未经验证的代码 权限。
即使有,那时您也会放弃任何安全措施。无法验证的代码与非托管代码具有相同的功能。例如,它允许您打破类型系统。
拥有 SkipVerification 而不是 UnmanagedCode(或相反)是没有意义的。两者是等价的,我认为这是两者都存在的框架中的一个错误。
【讨论】:
以上是关于c# 没有非托管权限的无法验证的代码的主要内容,如果未能解决你的问题,请参考以下文章