securityPolicy配置節是定義一個安全策略文件與其信任級別名稱之間的映射的集合。配置以下所示 html
其中name是指定映射到策略文件的命名的安全級別,通常的值有Full,Hight,Medium,Low,Minimal,UserDefined;policyFile指的是當前安全級別中對應的配置文件,該文件會存放在Windows\Microsoft.NET\Framework64\{.Net Framework Version}\Config或Windows\Microsoft.NET\Framework\{.Net Framework Version}\Config中。其默認配置以下 web
打開其中一個配置文件 數據庫
SecurityClasses中添加了一些下面各類配置用到的安全類,包括以CodeAccessPermission爲基類的代碼訪問權限,其包含在各個權限集PerssionSet裏面;以Condition爲後綴的類,用於斷定被測試的程序集是否屬於代碼組,以CodeGroup爲基類的代碼組類,實際上這些類我也沒了解太多。PermissionSet節點是權限配置的集合,其Name屬性爲ASP.NET的指的是。裏面的子節點IPermission則是對CodeAccessPermission的子類的配置。IPermission的class屬性的值須要和SecurityClass節點的name屬性對應。針對不一樣的Permission權限類能夠指定不一樣的配置。 windows
在MSDN官網上面的文章中介紹了幾個權限類,這裏也順帶翻譯一下 安全
OleDbPermission 服務器
經過OleDbPermission權限類能使你的網頁應用程序支持多種數據庫類型,添加無限制的OleDbPermission 權限到你的策略文件中意味着你的應用程序能夠在服務器上使用OLE DB Provider,例如達到對catelog.mdb數據庫的訪問方式進行限制。 網絡
在上面add節點中,ConnectionString屬性是指定一條可用的鏈接字符串,KeyRestrictions屬性用於指定在鏈接字符串中可用或者不可用的參數。其可用仍是不可用的設置在KeyRestrictionBehavior屬性中設置,它有兩個值AllowOnly和PreventUsage。 架構
若是毋需任何限制則改爲下面的配置,關鍵是Unrestricted屬性的設置。 ide
EventLogPermission 測試
經過EvntLogPermission權限類能夠控制當前應用程序可否許可進入Windows的事件日誌。其IPermission設置以下所示
access屬性設置了administer才能使被信任的應用程序寫入事件日誌。
創建事件源:假設你的應用程序須要使用應用程序指定事件源,則必須在安裝的時候啓用管理員特權。最好是使用那些支持Windows Installer或者支持 InstallUtil.exe系統組件的.NET的安裝類型。假如你在安裝或者部署的時候不能創建事件源,計算機管理員進入下面的註冊表中創建一個新的事件源。
但你不能經過提高ASP.NET進程帳戶的權限來經過寫入權限,不然攻擊者能夠更改一些日誌相關的設置。
FileIOPermission
若是你須要容許你的應用程序進入應用程序虛目錄之外的地方,則須要使用這個FileIOPermission權限類。例以下面定義一個應用程序能夠讀取"C:\SomeDir"目錄下的文件。
在讓應用程序訪問應用程序虛目錄之外的文件時,你須要下降代碼訪問的安全性來保障應用程序隔離能力。假如在一個服務器中有多個應用程序,你須要給不一樣的應用程序配備不一樣的標識來保護一些好比是ACLs文件的資源。
以上內容均是配置策略而已,當我在MSDN上看FileIOPermission類介紹的時候發現如下的一段代碼,
這段代碼就是使用代碼訪問權限的例子了,加入不具有FileIOPermission的進程讀取C盤下的test_r就會拋出異常,在博客園另一位園友的博客中也看到相關的示例代碼。
用這些權限類的做用就是使得它後面的代碼執行是通過具有權限的,不具有權限則不能執行下去。這些權限斷定的代碼能夠在用戶本身編寫,也有可能出如今.NET Framework的類庫裏面。這裏的權限就比Windows標識中具有的權限粒度更細,可讓同一windows標識下不一樣的應用程序具有有差異的權限。
那下面則介紹如何給ASP.NET應用程序分配信任等級,經過在web.config中的turst配置節進行設置。
通常經常使用的屬性有level,這也是必填的,用於指定當前的信任等級,這個信任等級就對應securityPolicy配置節中的配置。orginUrl屬性做用是指定 URL 以用於在中等信任中配置的限制 WebPermission 權限。若是存在,則此屬性可用於只容許鏈接到 WebPermission 所指定的特定 URL 的某些類(如 HttpWebRequest)。看起了挺拗口且很差理解。在我理解是這個屬性當信任級別設置成中等的時候才生效,若是給這個屬性設置了一個url,這個URL會添加到WebPermission的類的可鏈接列表ConnectList中。凡是該列表中的URL在發出網絡請求時均可以經過。
固然這個turst節點能夠出如今不一樣路徑下而達到對不一樣路徑下的代碼具有不同的訪問權限。以下所示
參考文章
ASP.NET 信任級別和策略文件
來自 <https://msdn.microsoft.com/zh-cn/library/wyts434y(v=vs.110).aspx>
FRAMEWORK安全性之代碼訪問安全和角色安全
來自 <http://www.cnblogs.com/luminji/archive/2010/10/29/1864248.html>
How To: Use Code Access Security in ASP.NET 2.0
來自 <https://msdn.microsoft.com/en-us/library/ms998326.aspx>
trust 元素(ASP.NET 設置架構)
來自 <https://msdn.microsoft.com/zh-cn/library/tkscy493(v=vs.110).aspx>
管理安全策略
來自 <https://msdn.microsoft.com/zh-cn/library/wztcyd2e(v=vs.100).aspx>