該示例告訴系統:除非代碼收到寫入 C:\test.tmp 的權限,否則不應當運行。如果代碼遇到沒有授予該權限的安全策略,那么將引發 PolicyException,并且代碼不會運行。您可以確保代碼將被授予該權限,并且不必擔心由于權限太少而導致的錯誤。
該示例還告訴系統:不需要其他權限。除此之外,代碼將被授予策略選擇要授予它的任何權限。雖然額外的權限不會導致損害,但如果某處有安全問題,則擁有較少的權限可以很好地堵住漏洞。帶有代碼不需要的權限會導致安全問題。
將代碼所接收的權限限制為最少特權的另一個方式是列出要拒絕的特定權限。如果您要求所有權限都是可選的,并從該請求中排除特定權限,那么權限通常會被拒絕。
確保狀態數據的安全處理敏感數據或作出任何安全決定的應用程序需要使該數據處于自己的控制下,并且不能讓其他的潛在惡意代碼直接訪問該數據。使數據安全地保留在內存中的最佳方式是將其定義為私有或內部(限制在同一程序集的范圍內)變量。但是,此數據也服從于您應當知道的訪問權:
•在反射時,引用了對象的高度受信任代碼可以獲得并設置私有成員。
•使用序列化時,如果高度受信任的代碼可以通過對象的序列化形式訪問相應數據,那么它就可以有效地獲得和設置私有成員。
•在調試時,可以讀取該數據。
確保自己的任何方法或屬性都沒有無意地公開這些值。
在某些情況下,數據可以使用“protected”加以保護,這時,只能訪問該類及其派生類。但是,由于存在其他公開的可能性,您還應當采取下面的預防措施:
•通過將類的派生限制在同一個程序集內,或使用聲明性安全來要求某些標識或權限以便從您的類中派生,從而控制允許哪些代碼從您的類中派生(請參閱本文的確保方法訪問的安全部分)。
•確保所有派生類都實現了相似的保護或者被密封。
裝箱的值類型如果您認為已經分發了無法修改原始定義的類型的副本,有時還可以修改裝箱的值類型。返回裝箱的值類型時,您所返回的是對值類型的引用,而不是對值類型副本的引用,因而允許調用您代碼的代碼修改您的變量值。
文章來源于領測軟件測試網 http://www.kjueaiud.com/