我知道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