Dot-Net
程式碼訪問安全是個笑話?
我剛剛閱讀了有關程式碼訪問安全性的這篇文章。它有這樣一個例子:
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。