Dot-Net

程式碼訪問安全是個笑話?

  • October 7, 2015

我剛剛閱讀了有關程式碼訪問安全性的這篇文章。它有這樣一個例子:

using System.Security.Permissions;
public class MyFileAccessor 
{
 public MyFileAccessor(String path, bool readOnly)
 {
   path = MakeFullPath(path); // helper fcn
   FileIOPermissionAccess desiredAccess = readOnly
     ? FileIOPermissionAccess.Read
     : FileIOPermissionAccess.AllAccess;
   FileIOPermission p = new FileIOPermission(desiredAccess, path);
   p.Demand();
   // 
   ••• 
   open the file
  }
  // •••
}

如果我沒有使用FileIOPermissionAccess 類型並且根本沒有在我的程式碼中包含像*p.Demand()這樣的程式碼怎麼辦?*換句話說,如果我想做壞事,我為什麼要為此請求許可呢? 這不是一個笑話嗎?還是我弄錯了?

嗯,是的,這個例子有點開玩笑,你自己永遠不會寫這樣的東西。缺少的是真正重要的部分, // 打開文件的程式碼。例如,它的現實版本是 pinvoke CreateFile()。

關鍵是Windows對CAS一無所知。因此,如果您提供這樣的實用程序函式並且想要強制執行 CAS 規則,那麼您必須驗證您的呼叫程式碼是否具有所需的權限。當然,這種程式碼真的只屬於.NET框架。看看FileStream.Init()並註意在 CreateFile 呼叫之前需要 FileIOPermission。

引用自:https://stackoverflow.com/questions/3961015