2009-05-30 53 views
0

我知道CAS是of limited value,但我仍想了解它。为什么此代码访问安全性示例被破坏?

我不明白我所看到的行为:基本的默认CAS在我相当正常的环境下似乎根本不起作用。

借此样品等级:

using System; 
using System.Security; 
using System.Security.Permissions; 

namespace CASNotWorkingExample 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      FileIOPermission perm = new FileIOPermission(PermissionState.Unrestricted); 

      if (SecurityManager.IsGranted(perm)) 
       Console.WriteLine("granted"); 
      else 
       Console.WriteLine("denied"); 

      Console.ReadKey(); 
     } 
    } 

} 

我建立这个,把exe文件,CASNotWorkingExample.exe,到另一台计算机(IP为192.168.1.101)上的文件共享 “不可信”。然后使用\\192.168.1.101\untrusted\CASNotWorkingExample.exe从非管理员命令提示符运行它,期望它返回“被拒绝”。它不是;它返回“授予”。

Windows知道它正在处理可疑安全性的远程EXE。当我从开始菜单“运行...”对话框运行相同的命令时,我得到了通常的安全警告“发布者无法验证,您确定等等。”。所以它不会错误地认为exe在本地机器上运行并且错误分配区域。另外,当我使用.NET 2.0 Configuration Tool(右键单击“运行时安全策略”,选择“Evaluate Assembly ...”)查看同一个exe文件时,我发现.NET只分配Internet_Zone对程序集的权限。这些权限不包括FileIOPermission(独立存储是它自己的权限)。

alt text http://img5.imageshack.us/img5/2256/casperms.jpg

的数据,可能是别人有用的,但一直没有给我至今:

  • 我就遇到了这个,同时通过MS Press book的MCTS 70-536考试工作。第11章是关于CAS的;第1课/例1对我来说很失败,几乎如上所述。你在这里看到的是一个精简的变体。
  • 我已经证实,这样的EXE实际上可以写入磁盘,即IsGranted检查可能是正确的。
  • 这两台机器运行Vista SP1和WinXP。无论哪个客户端和哪个文件服务器,行为都是相同的,所以它不是Vista的东西。
  • 以标准非特权用户身份和管理员身份运行时,行为是相同的。
  • 未在AD域中运行。
  • 客户端和文件服务器上的用户名和密码相同,因此我可以访问该文件而无需使用net use来提供凭据。

我确定这将是那些“arrrgh”时刻之一...我错过了什么?

回答

0

改变的方式是当启动托管exe文件时有一个新的证据。当exe从win32 CreateProcess API直接启动时,托管exe文件被赋予完全信任。

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

很混乱。

更多信息可以在这里找到:

msdn social

Brad Abrams blog

+0

这些链接完美地解释了它。谢谢!你会认为70-536的书籍作者想要在勘误中记下一个音符...... – 2010-01-19 21:45:12

1

我不是CAS大师,但我怀疑这可能是由于change in .NET 3.5 SP1允许来自网络共享的代码作为完全信任运行。

编辑:Brad Abrams states重新编译/目标不需要利用这一点。我认为它的工作原理与此相反 - 如果您的计算机上安装了3.5 SP1,那么瞄准2.0不会让您成为旧行为。

现有应用程序不必重新编译或以任何方式进行更改以利用此功能。你目前的2。0应用程序将正常工作,你不必针对任何新的3.5 ..

我想只有2.0 FX的新鲜(虚拟机)安装可能能够将其归因于此。

+0

哇...这是一个非常令人吃惊的变化放在一个服务包。发行说明知识库文章(951847)根本没有提到这一点。 我回去重新调整了.NET 2.0的exe文件,但行为没有改变。要么我没有正确地限制运行时版本,要么有一些其他解释为什么mscorcfg看到一组权限,而正在运行的应用程序看到另一组权限。如果这种差异是正常的,那么MSFT已经走到了最后,并放弃了CAS。无论如何,他们似乎正在以这种方式移动... – 2009-05-30 10:10:51