成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談CLR 4.0安全模型的運作機制

開發 后端
在公共語言運行時(CLR)過往的版本中,安全模型一直是最為復雜的模塊之一,由于涉及Evidence,CAS策略等機制,難以被用戶使用。在Silverlight中,CLR團隊提出了三層安全級別,大大簡化了安全模型,得到了很多積極的反饋。所以CLR 4.0安全模型對之加以改進,希望能幫助用戶開發出更為安全的應用程序。

CLR 4.0安全模型三層安全級別及其運作機制

CLR4.0中的安全級別,從低到高排列如下:

Transparent

SafeCritical

Critical

其運作機制如下圖所示,可以用三個箭頭加以說明:

Transparent的代碼可以調用SafeCritical的代碼

SafeCritical的代碼可以調用Critical的代碼

Transparent的代碼不可以調用Critical的代碼


下面的代碼展示了安全級別的運作機制:

  1: using System;
  2: using System.Security;
  3:
  4: // 這個屬性使得assembly中沒有Security標記的方法默認為Transparent方法
  5: [assembly:AllowPartiallyTrustedCallers]
  6:
  7: namespace SecurityLevel
  8: {
  9:     public class Program
 10:     {
 11:         // 標記Foo為Critical方法。
 12:         [SecurityCritical]
 13:         static void Foo()
 14:         {
 15:             Console.WriteLine("Hello Foo");
 16:         }
 17:
 18:         static void Main()
 19:         {
 20:             // 這個調用會導致以下的異常:
 21:             // Unhandled Exception: System.MethodAccessException: SecurityLevel.Program.Foo()
 22:             // at SecurityLevel.Program.Main()
 23:             Foo();
 24:         }
 25:     }
 26: }

Main函數由于沒有任何安全屬性,而且在assembly上有AllowPartiallyTrustedCallers屬性,所以他的安全級別是Transparent,根據前文提及的安全機制,不能直接調用Critical函數Foo,于是命令行上顯示了異常信息。

應用安全級別構筑體用程序

CLR 4.0安全模型提供了這樣的一個機制,用戶只有正確使用這些機制,才能構筑健壯的應用程序。在這里,“正確的使用”指的是合理的設置函數的安全級別,對三個安全級別設置的指導原則如下:

Critical:通常用來執行高危操作,比如對文件系統的讀寫。

SafeCritical:用來做安全方面的檢驗,或者只做限制性的操作。

Transparent:來自任何部分信任的程序代碼。

舉例來說,我們把三層模型應用到cookie的讀寫上,***層可以有一個Critical的函數,用來在文件系統上寫一個cookie文件。中間層有一個SafeCritical,用于檢驗cookie操作的文件是否屬于特定的文件夾,就好像做一個安全檢查:如果通過了,則允許操作;否則的話就拒絕之。

下面的例子展示了一個簡化后的應用,從D盤的temp文件夾中刪除文件。請參見代碼中的注釋理解程序。

  1: using System;
  2: using System.IO;
  3: using System.Security;
  4:
  5: // 這個屬性使得assembly沒有Security標記的方法默認為Transparent方法
  6: [assembly:AllowPartiallyTrustedCallers]
  7:
  8: namespace SecurityLevel
  9: {
 10:     public class Program
 11:     {
 12:         /// <summary>
 13:         /// 該函數可以刪除文件系統上的任意函數。具有***的安全級別
 14:         /// </summary>
 15:         /// <param name="fileName">文件名</param>
 16:         [SecurityCritical]
 17:         static void DeleteFile(string fileName)
 18:         {
 19:             File.Delete(fileName);
 20:         }
 21:
 22:         /// <summary>
 23:         /// 該函數驗證待刪文件是否在d:\temp中
 24:         /// </summary>
 25:         /// <param name="fileName">待刪文件名</param>
 26:         [SecuritySafeCritical]
 27:         static void DeleteFileFromTemp(string fileName)
 28:         {
 29:             if (fileName.StartsWith(@"d:\temp", StringComparison.CurrentCultureIgnoreCase)
 30:             {
 31:                 DeleteFile(fileName);
 32:             }
 33:             else
 34:             {
 35:                 throw new Exception("待刪文件不在temp文件夾中");
 36:             }
 37:         }
 38:
 39:         static void Main()
 40:         {
 41:             // 該語句運行正常
 42:             DeleteFileFromTemp(@"d:\temp\a.txt");
 43:
 44:             // 該語句拋出異常
 45:             DeleteFileFromTemp(@"d:\a.txt");
 46:         }
 47:     }
 48: }
 49:

安全級別和.NET類型系統

理解了安全級別的應用之后,我們來看看安全級別和.NET類型系統之間的關系:

安全級別和反射

反射機制提供了這樣三個屬性來探測一個類型(Type)和方法(MethodInfo)的安全級別

  1. IsSecurityCritical { get; }  
  2. IsSecuritySafeCritical { get; }  
  3. IsSecurityTransparent { get; }  

大家可以觀察到,這三個屬性是只讀的,因為通常境況下,編譯器會寫入了相關信息。

CLR 4.0安全模型的安全級別和繼承

以下兩點值得注意:關于類型,子類型的安全級別必須等于或者高于父類型的安全級別;關于方法,繼承的方法不能改變基類型方法的安全級別

安全級別和委托(Delegate)

調用者不能創建一個安全級別更高的Delegate,也不能創建一個指向安全級別更高方法的Delegate。

CLR 4.0安全模型小結

本文介紹了CLR4.0中引入的三層安全級別以及運作機制,示例了安全級別的設置原則,講述了安全級別和類型系統的關聯。

【編輯推薦】

  1. 探秘CLR 4.0中的代碼契約
  2. CLR線程池的作用與原理淺析
  3. SQL Server 2005中的CLR集成
  4. CLR 4.0中的新內容 狀態錯亂異常
  5. 探秘CLR 4.0中的代碼契約
責任編輯:彭凡 來源: cnblogs
相關推薦

2009-06-30 09:55:24

Spring運作機制

2009-06-15 10:20:47

WF 4.0 Beta跟蹤機制

2009-03-11 10:29:23

代碼契約.NETCLR

2009-09-18 11:29:23

.NET CLR

2009-03-12 09:30:46

異常CLR.NET

2020-02-26 09:00:00

Chatbot架構模型聊天機器人

2009-08-06 17:01:53

信息安全網絡監管

2009-08-25 15:30:55

DataGrid We

2016-01-15 16:13:43

2009-07-24 10:42:28

CLR線程池

2009-07-16 09:46:20

iBATIS Log機

2009-10-23 10:50:04

CLR安全性

2012-11-07 10:06:05

路由器VPN

2020-09-30 06:47:22

Kotlin機制

2009-10-22 17:10:04

CLR和JRE運行機制

2009-10-22 17:39:34

CLR內存管理

2009-06-22 09:36:06

WF 4.0 beta跟蹤配置

2022-09-08 09:59:23

API網絡安全

2011-05-16 14:13:04

模型測試

2020-10-05 21:44:18

虛假日志SIEM網絡安全
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级毛片大全免费播放 | 国产色网站 | 亚洲国产精品久久久久秋霞不卡 | 欧美日一区 | 99成人在线视频 | 亚洲小视频在线观看 | 亚洲高清一区二区三区 | 欧美精品一区二区三区蜜桃视频 | 视频一区欧美 | 精产嫩模国品一二三区 | 亚洲国产精品久久久久秋霞不卡 | 国产精品美女久久久久久久网站 | 久久久夜色精品亚洲 | 国产在线视频一区二区 | 国产视频福利在线观看 | 国产视频一区二区 | 欧美一区在线视频 | 亚洲精品久久久久久国产精华液 | 日韩有码一区二区三区 | 99热在这里只有精品 | 九九久久久 | 日韩一区二区三区在线视频 | 国产日韩一区二区三区 | 欧美精品在欧美一区二区 | 黄 色 毛片免费 | 日本韩国电影免费观看 | 91精品综合久久久久久五月天 | 久久免费视频2 | 中国一级特黄毛片大片 | 久草.com | 特级黄一级播放 | 国产一二区免费视频 | 我要看免费一级毛片 | 日本一区二区三区四区 | 在线观看成年人视频 | 久久久久久久国产精品 | 91大神在线看 | 国产在线成人 | 亚洲精品一区中文字幕乱码 | 欧美国产日韩在线观看成人 | 免费观看成人鲁鲁鲁鲁鲁视频 |