我知道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”时刻之一...我错过了什么?
这些链接完美地解释了它。谢谢!你会认为70-536的书籍作者想要在勘误中记下一个音符...... – 2010-01-19 21:45:12