当前位置:  开发笔记 > 大数据 > 正文

如何用CAS拒绝断言?

如何解决《如何用CAS拒绝断言?》经验,为你挑选了1个好方法。

在这段代码中,我希望禁止ReadFileSystem方法断言文件系统的权限.

我预计这将抛出fileIo.Assert(),但事实并非如此.为什么?

using System.Security.Permissions;
static void Main(string[] args)
{
    var fileIo = new FileIOPermission(PermissionState.Unrestricted);
    var secuPerm = new SecurityPermission(SecurityPermissionFlag.Assertion);
    PermissionSet set = new PermissionSet(PermissionState.Unrestricted);
    set.AddPermission(fileIo);
    set.AddPermission(secuPerm);
    set.Deny();
    ReadFileSystem();
    Console.Read();
}

private static void ReadFileSystem()
{
    var fileIo = newFileIOPermission(PermissionState.Unrestricted);
    fileIo.Assert();

    DirectoryInfo dir = new DirectoryInfo("C:/");
    dir.GetDirectories();
}

更新

CAS上有很棒的链接:http://blogs.msdn.com/shawnfa/archive/2004/08/25/220458.aspx



1> Jason Kresow..:

随后的Assert否定了Deny的影响.

断言FileIOPermission的能力主要取决于您的程序集是否可信.它不受先前Deny of FileIOPermission的影响.事实证明,它也不受先前拒绝断言安全许可的影响.这是因为SecurityPermissionFlag.Assertion被检查为链接时间需求.这没有明确记录; 我在这里找到了.

要强制CLR不信任程序集的FileIOPermission,可以在using语句后面的文件顶部使用以下内容.将其添加到文件中时,断言将不会生效.这会影响整个装配.没有更精细的粒度.

[assembly:FileIOPermission(SecurityAction.RequestRefuse, Unrestricted=true)]

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有