2009-05-30 79 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