代码之家  ›  专栏  ›  技术社区  ›  kpierce8

为什么在本地主机(127.0.0.1)上运行的CAS演示代码不能识别安全区域?

  •  1
  • kpierce8  · 技术社区  · 15 年前

    我在MCTS 70-536培训包第11章的代码访问安全中运行实验室。我正在运行xp pro。第一个实验室创建一个程序集,该程序集检查不同的权限并报告消息(如果存在)。但是当我把它当作 \\\127.0.0.1\c$\ListPermissions.exe 它应该识别出在内部网区域中,并使用内部网权限集。但是,似乎授予了所有权限。这种行为听上去很熟悉吗?如果没有,是否有方法检查从共享运行时程序集认为它在哪个区域?如果这个问题的某个特定部分太模糊,请告诉我,我将尝试重新表述它。

    3 回复  |  直到 6 年前
        1
  •  1
  •   cgon    14 年前

    我也有同样的问题,但是我尝试了别的方法。我创建了一个应用程序域,并使用不同的区域设置从我的应用程序域执行代码,而不是从共享文件夹或C驱动器的根目录等不同位置执行程序。这是我的代码:

     object[] hostEvidence = { new Zone(SecurityZone.Internet) };
     Evidence appDomainEvidence = new Evidence(hostEvidence, null);
     AppDomain d = AppDomain.CreateDomain("MyDomain", appDomainEvidence);
     d.ExecuteAssembly("ListPermissions.exe");
    

    当我的区域设置为mycomputer时,listpermissions执行而不提供任何执行,并且每个权限都返回true。然而,当我将我的区域设置为Internet或Intranet时,Executeassembly行开始给出一些执行选项,这些选项实际上让我很高兴。至少在某种程度上是可行的。

    根据我的理解,当您从不同的位置运行应用程序时,clr会看到正在运行的代码有不同的证据,并将程序集分配给不同的代码组,如mycomputer或internet。但是,至少在我的配置中,情况并非如此,另一个论坛得出结论,对于.NET Framework 3.5,从共享文件夹运行的程序集没有从Internet区域运行的程序集的确切证据。 http://social.msdn.microsoft.com/Forums/en/clr/thread/5f5f0925-64fc-4fc8-9be3-d077d27d2554 实际上,我不知道让程序像书中那样执行的确切解决方案。只想与一个创建的自定义应用程序域共享这个代码,就像它应该做的那样。

    希望这有帮助

    谢谢

        2
  •  1
  •   Ed Sykes    15 年前

    似乎.NET平台发生了变化。在启动托管exe时添加了新的证据。当从win32 createprocess api直接启动exe时,托管的exe将得到完全信任。

    当然,.NET配置工具不启动exe,只检查它。这意味着证据是不同的,并且会影响分配给它的代码组。这反过来影响权限。

    这很让人困惑。更令人困惑的是,你应该在考试中给出答案。我想答案和书中的一样。我不认为这种变化已经渗透到了考试内容团队中。

    更多信息可在这里找到:

    msdn social

    brad abrams blog

        3
  •  0
  •   Marconline    15 年前

    嗨,我不知道您是否知道运行此示例时会发生什么,但是使用.NET Framework 2.0配置工具下的评估程序集,我可以看到该程序集应在Internet区域和Internet相同的站点访问代码组下运行。这些代码组授予由5个授权组成的子集: -用户界面 -独立存储 -保护 IO对话框 打印

    在配置工具下似乎没问题…但是装配行为是完全不同的…不知道:

    马尔科