我知道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
放到文件共享“untrusted”上的另一台机器(IP是192.168.1.101)上。然后我使用\\192.168.1.101\untrusted\CASNotWorkingExample.exe
从非管理命令提示符运行它,期望它返回“被拒绝”。它不是;它返回“已授予”。
Windows知道它正在处理一个有问题的安全性的远程EXE。当我从开始菜单运行...对话框中运行相同的命令时,我得到通常的安全警告“发布者无法验证。你确定等等”。因此,它不会错误地认为exe在本地计算机上运行并错误分配区域。
此外,当我使用.NET 2.0配置工具查看相同的exe时(右键单击“运行时安全策略”,选择“评估程序集...”),我看到.NET只分配了Internet_Zone权限到集会。这些权限不包括FileIOPermission(独立存储是它自己的权限)。
alt text http://img5.imageshack.us/img5/2256/casperms.jpg
可能对其他人有用但迄今为止没有找到我的数据:
net use
来提供凭据。我确信这将成为那些“arrrgh”时刻之一...我错过了什么?
答案 0 :(得分:1)
我不是CAS大师,但我怀疑这可能是由于change in .NET 3.5 SP1允许来自网络共享的代码作为完全信任运行。
编辑:Brad Abrams states不需要重新编译/目标来利用这一点。我认为它反向运行相同 - 如果您的计算机上有3.5 SP1,那么定位2.0将无法让您获得旧的行为。
不必以任何方式重新编译或更改现有应用程序以利用此功能。您当前的2.0应用程序将正常工作,您无需在3.5 ..
中定位任何新内容
我认为仅使用2.0 FX的全新(VM)安装可能能够将其作为原因。
答案 1 :(得分:0)
更改的工作方式是在启动托管exe时有一个新的证据。当从win32 CreateProcess API直接启动exe时,托管exe将获得完全信任。
当然,.net配置工具不会启动exe,只是检查它。这意味着证据不同并影响分配给它的代码组。这反过来会影响权限。
相当混乱。
可在此处找到更多信息: