我有一些C#代碼。它有一些配置設置存儲爲自動屬性或專用字段。理論上,使用它的人可以通過Reflection來修改私有變量。隱藏在.Net中的閉包變量
有沒有辦法否定它?我可以使用只讀靜態字段,然後它們不能被修改。但是對這個類本身的引用仍然可以用另一個惡意設置替換。
我想過關閉匿名方法和變量。但在這種情況下,該代表的鏈接仍可以替換。
另外我試過爲我的字段指定SecurityCriticalAttribute,因爲調用者可能沒有FullTrust訪問權限,但似乎沒有驗證字段的訪問權限。只是方法\類itselfs
UPDATE
我固定它以這樣的方式:
- 初始化所有通過構造變量
- 所有變量具有隻讀的定義
我已經將CAS屬性添加到構造函數中,所以沒有FullTrust的人不能修改它
[PermissionSetAttribute(SecurityAction.Demand, Unrestricted = true)]
所以要更新變量,用戶需要創建該類的新實例。然後CAS驗證將驗證呼叫者。
我不喜歡這種方法太多了,如果你有更好的辦法,我會很感激
您不能:http://stackoverflow.com/a/8357546/857807 – dcastro
是的,同意。但我的調用者將使用沙箱appdomain。而該appdomain只會擁有反射權限。似乎構造函數的[PermissionSet]現在對我來說工作正常。也許是的,沒有限制的AppDomain,我不能否認它。 –