.NET Framework(又稱(chēng) .NET 框架)。是由微軟開(kāi)發(fā),一個(gè)致力于敏捷軟件開(kāi)發(fā)(Agile software development)、快速應用開(kāi)發(fā)(Rapid application development)、平臺無(wú)關(guān)性和網(wǎng)絡(luò )透明化的軟件開(kāi)發(fā)平臺。.NET是微軟為下一個(gè)十年對服務(wù)器和桌面型軟件工程邁出的第一步。.NET包含許多有助于互聯(lián)網(wǎng)和內部網(wǎng)應用迅捷開(kāi)發(fā)的技術(shù)。.NET Framework 是微軟公司繼Windows DNA之后的新開(kāi)發(fā)平臺。
.NET Framework 是以一種采用系統虛擬機運行的編程平臺,以通用語(yǔ)言運行庫(Common Language Runtime)為基礎,支持多種語(yǔ)言(C#、VB、C++、Python等)的開(kāi)發(fā)。NET也為應用程序接口(API)提供了新功能和開(kāi)發(fā)工具。這些革新使得程序設計員可以同時(shí)進(jìn)行Windows應用軟件和網(wǎng)絡(luò )應用軟件以及組件和服務(wù)(web服務(wù))的開(kāi)發(fā)。.NET提供了一個(gè)新的反射性的且面向對象程序設計編程接口。.NET設計得足夠通用化從而使許多不同高級語(yǔ)言都得以被匯集。.NET Framework 中的所有語(yǔ)言都提供基類(lèi)庫(BCL)。
.NET編譯平臺由核心組件及其他構件(開(kāi)發(fā)工具及協(xié)議、WEB客戶(hù)端及終端用戶(hù)應用、WEB服務(wù)及企業(yè)服務(wù)器)所組成。微軟的Windows作為操作系統運行于.NET框架之下,在Windows XP SP2/Windows Server 2003/Windows Vista系統中內置.NET框架,它也可以安裝在大多數老版本的Windows系統中。.NET框架作為.NET開(kāi)發(fā)平臺的核心組件為Web服務(wù)及其它應用提供構建、移植和運行的環(huán)境。.NET組件是一個(gè)帶有動(dòng)態(tài)鏈接庫擴展的預編制類(lèi)模塊。在運行的時(shí)候,通過(guò)使用一個(gè)用戶(hù)使用程序被激活并加載到內存中。.NET組件是用于創(chuàng )建網(wǎng)絡(luò )和Windows應用程序的,這些應用程序使一個(gè)應用程序所需的功能可以顯示在外部。.NET平臺還包含Web表單,Web表單是可從網(wǎng)上下載的標準接口。一個(gè)Web表單包含供使用者輸入數據資料的文本框。然后使用者可以將表單提交給接收器。.NET平臺至關(guān)重要的一部分就是網(wǎng)絡(luò )服務(wù)器。網(wǎng)絡(luò )服務(wù)器查詢(xún)協(xié)議和標準的合集。應用程序可以使用網(wǎng)絡(luò )服務(wù)器通過(guò)計算機網(wǎng)絡(luò )交換數據資料。例如,當你在線(xiàn)上訂購火車(chē)票,并輸入你的信用卡卡號付款時(shí),你就在使用網(wǎng)絡(luò )服務(wù)器。
穩定版本 4.0
操作系統 Windows 98,Windows NT 4.0,Windows Server 2003,Windows XP,Windows Vista,Windows Server 2008,Windows 7,Windows 8,Windows Server 2012
類(lèi)型 系統平臺
許可協(xié)議 許可協(xié)議Proprietary software
版本完整版本號發(fā)行日期Visual StudioWindows 默認安裝
1.0 1.0.3705.0 2002-02-13 Visual Studio .NET 2002 Windows XP Media Center EditionWindows XP Tablet PC Edition
1.1 1.1.4322.573 2003-04-24 Visual Studio .NET 2003 Windows Server 2003
2.0 2.0.50727.42 2005-11-07 Visual Studio 2005
3.0 3.0.4506.30 2006-11-06 Windows VistaWindows Server 2008
3.5 3.5.21022.8 2007-11-19 Visual Studio 2008 Windows 7Windows Server 2008 R2
4.0 4.0.30319.1 2010-04-12 Visual Studio 2010
4.5 4.5.50709 2012-08-16 Visual Studio 2012 RTM Windows 8Windows Server 2012
完整版本號 - 1.0.3705。這是最初的.NET構架,發(fā)行于2002年。它可以以一個(gè)獨立且可重新分發(fā)的包的形式或在一個(gè)軟件發(fā)展工具包集中被獲得。它也是第一個(gè)微軟Visual Studio .NET的發(fā)行版的一部分(也被稱(chēng)作Visual Studio .NET 2002)。
完整版本號 - 1.1.4322。這是首個(gè)主要的.Net Framework升級版本,發(fā)行于2003年。它可以以一個(gè)獨立的可重新分發(fā)的包的形式或在一個(gè)軟件發(fā)展工具包集中被獲得。它也是第二個(gè)微軟Visual Studio .NET版本的一部分(也被稱(chēng)作Visual Studio .NET 2003)。它也是首個(gè)被Windows操作系統-Windows Server 2003所內置的.Net Framework版本。
自1.0版本以來(lái)的改進(jìn):
自帶了對mobile asp .net控件的支持。這在1.0版本是以附加功能方式實(shí)現的,現在已經(jīng)集成到框架的內部。安全方面的變更 - 使得Windows窗體代碼以可靠的行為運行,從而可以在Internet環(huán)境內安全運行,并且加入了ASP .NET應用程序的代碼安全訪(fǎng)問(wèn)功能。自帶了對ODBC和Oracle數據庫的支持。這在1.0版本是以附加功能方式實(shí)現的,現在已經(jīng)集成到框架的內部。.NET Compact Framework- 這是一個(gè)用于智能設備(例如Pocket PC或者SmartPhone)的.Net Framework的子集。對IPv6的支持。大量的API變更。
完整版本號 - 2.0.50727.42,發(fā)行于2005年10月27日。
.Net Framework 2.0的組件都包含在 Visual Studio 2005和SQL Server 2005里面。通過(guò)MSDNUniverse版可以免費下載RTM版本。自1.1版本以來(lái)的改進(jìn):大量的API變更。新的API讓需要管理.NET運行庫實(shí)例的非.NET的應用程序可以做到這點(diǎn)。這個(gè)新的API對.NET運行庫的各種功能,包括:多線(xiàn)程、存儲器分配、代碼加載等,提供了很好的控制。它最初是為Microsoft SQL Server能夠有效率的使用.NET運行庫而設計的,因為Microsoft SQL Server擁有它自己的日程管理器和存儲器管理器。
.NET Framework 3.0
此版本不支持 Windows 2000。
發(fā)行于2006年11月21日。曾用名“WinFX”。依然使用.Net Framework 2.0版本的公共語(yǔ)言運行庫(CLR),并加入了適應未來(lái)軟件發(fā)展方向的4個(gè)框架:
Windows Presentation Foundation(WPF):提供更佳的用戶(hù)體驗,用來(lái)開(kāi)發(fā)Windows Forms程序以及流覽器應用程序.Windows Communication Foundation(WCF):提供SOA(面向服務(wù)的軟件構架)支持的安全的網(wǎng)絡(luò )服務(wù)(Web Service)框架。Windows Workflow Foundation(WF):提供一個(gè)設計與發(fā)展工作流程導向(Workflow-oriented)應用程序基礎支持的應用程序接口。Windows CardSpace:提供一個(gè)SSO的解決方案,每個(gè)用戶(hù)都有各自的CardSpace。
此版本不支持 Windows 2000。
這個(gè)版本將包含一個(gè)支持C#和VB .Net中心的語(yǔ)言特性的編譯器,以及對語(yǔ)言集成查詢(xún)(LINQ,Language-Integrated Query)的支持。該版本隨Visual Studio 2008一起發(fā)布。
同時(shí),.NET Framework 3.5自動(dòng)包含 .NET Framework 2.0 SP1以及 .Net Framework 3.0 SP1,用于為這兩個(gè)版本提供安全性修復,以及少量新增的類(lèi)庫(如System.DateTimeOffest)。此版本提供的新功能有:
擴展方法(Extension Method)屬性(Attribute),用于為擴展方法提供支持LINQ支持,包括LINQ to Object、LINQ to ADO .NET以及LINQ to XML表達式目錄樹(shù)( Tree),用于為L(cháng)ambda表達式提供支持與語(yǔ)言集成查詢(xún) (LINQ)和數據感知緊密集成。借助這個(gè)新功能,您可以使用相同的語(yǔ)法,在任何支持LINQ的語(yǔ)言中編寫(xiě)相關(guān)代碼,以篩選和枚舉多種類(lèi)型的SQL數據、集合、XML和數據集,以及創(chuàng )建它們的投影。利用asp .netAJAX可以創(chuàng )建更有效、更具交互性、高度個(gè)性化的Web體驗,這些體驗在所有最流行的瀏覽器上都能實(shí)現。用于生成WCF服務(wù)的全新Web協(xié)議支持,包括AJAX、JSON、REST、POX、RSS、ATOM和若干新的WS-*標準。Visual Studio 2008中面向WF、WCF和WPF的完整工具支持,其中包括支持工作流的服務(wù)這一新技術(shù)。.Net Framework 3.5基類(lèi)庫 (BCL)中的新類(lèi)可滿(mǎn)足許多常見(jiàn)的客戶(hù)請求。
該版本新增的ASP .NET功能,隨Visual Studio 2008 SP1發(fā)布,此版本提供了下列的新功能:
新增的ASP .NET功能包括ASP .NET動(dòng)態(tài)數據和ASP .NET AJAX附加功能,前者提供了無(wú)需編寫(xiě)代碼就可實(shí)現數據驅動(dòng)的快速開(kāi)發(fā)的豐富支架框架,后者為管理瀏覽器歷史記錄提供了支持(后退按鈕支持)。ADO .NET Entity Framework。對SQL Server 2008的數據提供程序支持。.Net Framework客戶(hù)端配置文檔是完整版.Net Framework的子集,面向客戶(hù)端應用程序。這改善了尚未安裝.Net Framework的計算機上的安裝體驗。改進(jìn)Windows Presentation Foundation的性能,其中包括啟動(dòng)速度的位圖效果性能的提高。為Windows Presentation Foundation增加的功能包括對業(yè)務(wù)線(xiàn)應用程序的更好支持、本機閃屏支持、DirectX像素著(zhù)色器支持以及新的WebBrowser控件。ClickOnce應用程序發(fā)布者可以根據具體情況決定是否取消簽名和散列,開(kāi)發(fā)人員可以以編程方式安裝顯示自定義署名的ClickOnce應用程序,ClickOnce錯誤對話(huà)框支持指向網(wǎng)絡(luò )上特定于應用程序的支持站點(diǎn)的鏈接。用于SQL Server的.Net Framework數據提供程序 (System.Data.SqlClient)完全支持SQL Server 2008數據庫引擎的所有新功能。有關(guān).Net Framework對SQL Server 2008的支持的更多信息,請參見(jiàn)SQL Server中的新功能 (ADO .NET)。ADO .NET數據平臺是一種多版本策略,它使開(kāi)發(fā)人員能夠針對概念性實(shí)體數據模型進(jìn)行編程,從而減輕他們的編碼和維護工作。此平臺提供了ADO .NET Entity Framework、實(shí)體數據模型 (EDM)、對象服務(wù)、LINQ to Entities、Entity SQL、EntityClient、ADO .NET數據服務(wù)及實(shí)體數據模型工具。Windows Communication Foundation現在提供了改進(jìn)的互操作性支持,增強了部分信任方案中的調試體驗,并擴展了集成協(xié)議支持以更廣泛地應用于Web 2.0應用程序,進(jìn)而使DataContract串行化程序更易于使用。Microsoft.VisualBasic.PowerPacks命名空間引入了新的DataRepeater控件,該控件以可自定義的列表格式顯示數據。此命名空間還包含新的矢量形狀。
此版本不支持 Windows 2000。
.NET Framework 4.0主要增加了并行支持,于2010年4月12日推出。
企業(yè)基礎 .NET提供開(kāi)發(fā)軟件的獨立平臺,自帶高度安全的網(wǎng)絡(luò )系統,相當倚重軟件組件以及組件導向程序。在這方面它完全取代前者(COM1)。
此版本不支持 Windows 2000、Windows XP。
.NET Framework 4.5 發(fā)行于2012年8月16日,是支持生成和運行下一代應用程序和 Web 服務(wù)的內部 Windows 組件。 .NET Framework 的關(guān)鍵組件為公共語(yǔ)言運行時(shí) (CLR) 和 .NET Framework 類(lèi)庫(包括ADO .NET、ASP .NET、Windows 窗體和 Windows Presentation Foundation (WPF) 和 Windows Workflow Foundation (WF))。 .NET Framework 提供了托管執行環(huán)境、簡(jiǎn)化的開(kāi)發(fā)和部署以及與各種編程語(yǔ)言的集成。
.NET for Windows Store apps:Windows Metro 風(fēng)格 應用程序為特定窗體因素并利用 Windows 操作系統的功能。 通過(guò)使用 C# 或 Visual Basic,.NET Framework 4.5 的子集可用于生成 Windows 的 Metro 風(fēng)格 應用程序。 這個(gè)子集稱(chēng)為 .NET for Windows Store apps
更新內容:
在部署期間,能夠通過(guò)檢測和關(guān)閉 .NET Framework 4 應用程序來(lái)減少系統重啟。為大于20 GB 在 64 位平臺上 (GB) 的數組支持。 此功能可在應用程序配置文件中啟用。
通過(guò)服務(wù)器的背景垃圾回收改進(jìn)性能。 當您使用服務(wù)器垃圾回收在 .NET Framework 4.5 中時(shí),后臺垃圾回收自動(dòng)啟用。
背景實(shí)時(shí) (JIT) 生成,可以選擇可用在多核處理器改進(jìn)應用程序性能。
在它超時(shí)之前,能夠限制正則表達式引擎要多久能?chē)L試解決正則表達式。
能夠定義應用程序域的默認區域性。
Unicode (UTF-16) 編碼的控制臺支持。
為版本控制區域性字符串排序和比較數據支持。
在檢索資源時(shí),請改進(jìn)性能。 請參見(jiàn) 打包和部署桌面應用程序中的資源。
Zip 壓縮改進(jìn)可減少壓縮文件的大小。
通過(guò) CustomReflectionContext 類(lèi),能夠自定義反射上下文來(lái)重寫(xiě)默認反射行為。
對于國際化域名的 2008 版在應用程序 (IDNA) 標準的支持,當 System.Globalization.IdnMapping 選件類(lèi)在 Windows 8 使用時(shí)。
當 .NET Framework 在 Windows 8 使用時(shí),到操作系統的字符串比較的委托實(shí)現 Unicode 6.0。 在其他平臺上運行時(shí),.NET Framework 包括其自己的實(shí)現 Unicode 5.x 的字符串比較數據。每個(gè)應用程序域的基礎上能夠計算字符串的哈希代碼。
ASP .NET動(dòng)態(tài)數據,它提供了豐富的框架,從而使用戶(hù)可以快速進(jìn)行數據驅動(dòng)的開(kāi)發(fā),而無(wú)需編寫(xiě)代碼;ASP .NET AJAX 的一項新增功能,對管理瀏覽器歷史記錄提供了支持(支持后退按鈕)。
對公共語(yǔ)言運行時(shí)的核心改進(jìn)包括:改進(jìn)了.NET Framework本機映像的布局、選擇不再對完全受信任的程序集進(jìn)行強名稱(chēng)驗證、提高了應用程序啟動(dòng)性能、改進(jìn)了生成的代碼以縮短端對端應用程序執行時(shí)間、選擇在A(yíng)SLR(地址空間布局隨機化)模式下運行托管代碼(如果操作系統支持)。此外,從網(wǎng)絡(luò )共享打開(kāi)的托管應用程序在完全受信任環(huán)境下運行時(shí)與本機 應用程序具有相同的行為。
提高了Windows Presentation Foundation的性能,包括縮短了啟動(dòng)時(shí)間,提高了與位圖效果有關(guān)的性能。WPF的其他新增功能包括:改善了對業(yè)務(wù)線(xiàn)應用程序、本機初始屏幕、 DirectX 像素著(zhù)色器的支持,并且新增了WebBrowser控件。
ClickOnce應用程序發(fā)行者可以決定在適當情況下不進(jìn)行簽名和加密,開(kāi)發(fā)人員可以編程方式安裝ClickOnce應用程序以顯示自定義署名,并且ClickOnce錯誤對話(huà)框支持鏈接到Web上應用程序特定的支持網(wǎng)站。
實(shí)體框架是從現有的一套ADO.N ET數據訪(fǎng)問(wèn)技術(shù)發(fā)展而來(lái)的。利用實(shí)體框架,開(kāi)發(fā)人員可以按照應用程序特定的域模型(而不是基礎數據庫模型)來(lái)針對關(guān)系數據庫進(jìn)行編程。有關(guān)更多信息,請參見(jiàn)實(shí)體框架入門(mén)。實(shí)體框架還引入了一些其他功能,包括支持SQL Server 2008的新類(lèi)型、默認實(shí)體圖形序列化和實(shí)體數據源。在此版本中,實(shí)體框架支持SQL Server 2008中的新日期和文件流功能。圖形序列化工作可幫助開(kāi)發(fā)人員生成將全部圖形建模為數據協(xié)定的Windows Communication Foundation (WCF)服務(wù)。實(shí)體數據源為希望使用實(shí)體框架的ASP .NET應用程序構建者提供了傳統的數據源體驗。
LINQ to SQL新增了對SQL Server2008中的新日期和文件流功能的支持。
ADO. NET Data Services Framework由滿(mǎn)足以下條件的模式和庫組合而成:支持將數據公開(kāi)為一項基于REST(具象狀態(tài)傳輸)的靈活數據服務(wù),企業(yè)網(wǎng)絡(luò )內部或整個(gè)互聯(lián)網(wǎng)上的Web客戶(hù)端都可以使用該服務(wù)。ADO.N ET Data Services Framework支持基于任何數據源創(chuàng )建數據服務(wù)。通過(guò)與 ADO .NET Entity Framework 的充分集成,可以輕松公開(kāi)基礎存儲架構的概念視圖模型??梢暂p松地從任一平臺訪(fǎng)問(wèn)使用ADO .NET Data Services Framework創(chuàng )建的服務(wù)以及兼容的Windows Live (dev.live .com)服務(wù)。針對運行在微軟平臺上的客戶(hù)端應用程序提供了一組客戶(hù)端庫,以簡(jiǎn)化與數據服務(wù)的交互。例如,基于.NET Framework的客戶(hù)端可以使用LINQ查詢(xún)數據服務(wù),也可以使用簡(jiǎn)單的.NET Framework對象層更新此服務(wù)中的數據。
現在,Windows Communication Foundation改進(jìn)了對互操作性的支持,增強了部分受信任情況下的調試體驗,并且擴展了整合協(xié)議支持以便在Web 2.0應用程序中可以進(jìn)行更廣泛的應用,從而使Data Contract序列化程序變得更易于使用。
用于SQL Server(Sql Client) 的.NET Framework數據提供程序新增了對SQL Server 2008中的文件流和稀疏列功能的支持。
在軟件環(huán)境中,應用程序的來(lái)源很多,它們執行很多任務(wù)。對應用程序代碼的信任是一個(gè)主要需求,因為誰(shuí)也不想軟件或信息遭到破壞。給予許可的安全策略不會(huì )允許對敏感信息的不適當的訪(fǎng)問(wèn),或將本地機器暴露給惡意的程序或甚至是有平常錯誤的代碼。
安全結構提供了基于用戶(hù)賬號的隔離和訪(fǎng)問(wèn)控制--在這些限制內給予代碼完全訪(fǎng)問(wèn)權,并假定由特定用戶(hù)可運行的代碼具有相同的信任度。不幸的是,如果所有程序都代表某用戶(hù)運行,根據用戶(hù)對代碼的隔離對于保護一個(gè)程序不被其它用戶(hù)使用是不夠的。另一種情況,不能被完全信任的代碼經(jīng)常被轉移到沙箱模型中執行,在此代碼運行于隔離環(huán)境,而不會(huì )訪(fǎng)問(wèn)大部分的服務(wù)。
應用程序的成功的安全解決方案必須能強化兩個(gè)安全模型間的平衡。它必須提供對資源的訪(fǎng)問(wèn),以便以完成有用的工作,它需要對應用程序的安全性作細致的控制以確保代碼被識別,檢測,并給予合適的安全級別。.NET Framework就提供了一個(gè)這樣的安全模型。
NET Framework 第一個(gè)SP服務(wù)包的最終版.這是一個(gè)累積更新,包含很多基于.NET Framework 不斷生成的新功能,此外還包括.NET Framework SP2和.NET Framework SP2累積更新,支持x86、x64、IA64三種架構。.NET Framework SP1集成了此前發(fā)布的三十個(gè)相關(guān)Hotfix熱修復補丁,同時(shí)還引入了不少新特性和改進(jìn):
NET Framework安全迎合了這種事實(shí):軟件向多樣化的移動(dòng)組件發(fā)發(fā)展,并根據這種事實(shí)提供保護。在一個(gè)細化的、可擴展的策略和許可系統下,用戶(hù)能夠運行功能強大的代碼,而同時(shí)減少相關(guān)的風(fēng)險。在沒(méi)有運行時(shí)對用戶(hù)作出信任決定時(shí),管理員可以在各個(gè)級別創(chuàng )建強壯的安全策略。策略是完全可定置的。開(kāi)發(fā)人員能夠集中解決應用程序邏輯,而不用關(guān)心核心的安全問(wèn)題(它由CLR透明地處理)。然而,開(kāi)發(fā)人員可以在任何時(shí)候擴展安全模型。
.NET Framework安全解決方案基于管理代碼的概念,以及由通用語(yǔ)言運行時(shí)(CLR)加強的安全規則。大部分管理代碼需要進(jìn)行驗證以確保類(lèi)型安全及預先定義好的其它屬性的行為的安全。例如,在驗證的代碼中,聲明為接收4字節值的訪(fǎng)問(wèn)將拒絕提供8字節參數的調用,因為不是類(lèi)型安全的。驗證過(guò)程還確保了執行流只傳送到已知的位置,如方法入口點(diǎn)--這個(gè)過(guò)程去除了跳轉到任意位置執行的能力。
驗證將阻止不是類(lèi)型安全的代碼執行,在它們引起破壞前捕獲很多常見(jiàn)的編程錯誤。通常的弱點(diǎn)--如緩存溢出,對任意內存或沒(méi)有初始化的內存的讀取,對控件的隨意傳送--都不再可能出現。這將使最終用戶(hù)受益,因為在他們執行代碼前對其進(jìn)行檢查。這也有益于開(kāi)發(fā)人員,他們會(huì )發(fā)現很多常見(jiàn)錯誤(過(guò)去一直在困繞前開(kāi)發(fā))現在可以查明,并能阻止它們引起破壞。
CLR也能使非管理代碼運行,但非管理代碼不能從這些安全措施中受益。特殊的許可與對非管理代碼的調用能力相關(guān),一個(gè)強大的安全策略能確保這些許可被恰當地給予。經(jīng)過(guò)很長(cháng)時(shí)間后,非管理代碼到管理代碼的移植將減少對非管理代碼的調用頻率。
認證是一個(gè)過(guò)程,它接收來(lái)自用戶(hù)的證書(shū),并對證書(shū)的授權進(jìn)行確認。如果證書(shū)是有效的,那么用戶(hù)就可以說(shuō)他擁有已認證的身份。而授權的過(guò)程是:確定認證用戶(hù)是否能夠訪(fǎng)問(wèn)給定的資源。
認證可通過(guò)系統或企業(yè)邏輯來(lái)完成,通過(guò)某個(gè)API它是或獲得的。認證API是完全可擴展的,因此開(kāi)發(fā)人員根據需要使用自己的企業(yè)邏輯。開(kāi)發(fā)人員可以對他們的認證需求進(jìn)行編碼,也可以修改底層的認證方法而無(wú)需對他們的代碼作太大變化。除了微軟Windows操作系統身份認證外,還有的認證方法包括基本HTTP,摘要和 Kerberos,以及微軟Passport和基于窗體的認證。這些認證方法已經(jīng)完全集成到AS P.N ET中了。
在A(yíng)SP. NET窗體認證中,用戶(hù)提供證書(shū),并提交窗體。如果應用程序簦別請求,系統發(fā)送一個(gè)cookie ,該cookie以某種形式包含包含了證書(shū)或包含重新獲得身份的關(guān)鍵字。接下來(lái)發(fā)送的請求在頭中包含了cookie,ASP. NET處理程序通過(guò)應用程序所期望的任何有效方法對這些請求認證和授權。如果請求沒(méi)有經(jīng)過(guò)認證,HTTP客戶(hù)端將用于把請求發(fā)送到認證窗體,在那里用戶(hù)可能提供信任證書(shū)。窗體認證有時(shí)用于個(gè)性化--為已知用戶(hù)的內容進(jìn)行定置。在一些情況下,身份是問(wèn)題所在而不是認證,因此用戶(hù)的個(gè)性化信息可以簡(jiǎn)單地通過(guò)訪(fǎng)問(wèn)用戶(hù)或獲得。
授權的目的是確定作出請求的身份是否被給予了對給定資源的訪(fǎng)問(wèn)權。ASP. NET提供了兩種類(lèi)型的授權服務(wù):文件授權和URL授權。文件授權根據正在作用的方法和作出請求的身份決定用戶(hù)使用于哪個(gè)訪(fǎng)問(wèn)控制列表。URL授權是URI名稱(chēng)空間和不同用戶(hù)或角色間的邏輯映射。
.NET Framework提供了一個(gè)特殊的功能,隔離存儲,用于存儲數據,甚至是當不允許對文件進(jìn)行訪(fǎng)問(wèn)時(shí)--例如,當從Internet下載了一個(gè)管理控件,并運行它,為它提供了有限的許可權但沒(méi)有權力讀寫(xiě)文件。
隔離存儲是一組新的用于.NET支持的用于本地存儲的類(lèi)型和方法。在本質(zhì)上,每個(gè)組合可以訪(fǎng)問(wèn)磁盤(pán)上一斷被隔離的存儲空間。它不允許訪(fǎng)問(wèn)其它數據,隔離存儲只對為它創(chuàng )建的組合有效。
隔離存儲也可被應用程序用于保存活動(dòng)記錄,保存設置,或者將狀態(tài)數據保存到磁盤(pán)上以備將來(lái)之用。因為隔離存儲的位置是預先決定好的,所以隔離存儲為指定唯一存儲空間提供了一種方便的方式,而不需要決定文件路徑。
從本地企業(yè)局域網(wǎng)獲得的代碼具有相似的限制,但更少,它可以訪(fǎng)問(wèn)大限額的隔離存儲。最后,從受限站點(diǎn)區域(不信任站點(diǎn))來(lái)的代碼沒(méi)有對隔離存儲的訪(fǎng)問(wèn)權。
.NET Framework引入了基于證據的安全的概念。在本質(zhì)上,它是對安全策略暴露出來(lái)問(wèn)題的解答:
組合從哪個(gè)站點(diǎn)獲得?
組合是.NET Framework應用程序的構件。它們組成了部署,版本控制,重用,激活作用域,安全認證的基本單元。應用程序的組合是從網(wǎng)站上下載到客戶(hù)端的。
組合是從哪個(gè)URL獲得的?
安全策略需要明確的地址,而組合是從這個(gè)地址下載的。
組合是從哪個(gè)區獲得的?
區是基于代碼的位置,對安全標準,如 Internet, intranet和本機等等,的描述。
組合的強名(strong name)是什么?
強名是由組合的創(chuàng )建者提供了密碼強化后的標識符。盡管它沒(méi)有提供對創(chuàng )建者的任何證明,但它唯一標識了組合,確保了組合沒(méi)有被破壞過(guò)。
根據對這些問(wèn)題的回答,及其它證據,安全策略可以對賦予組合垢合適許可進(jìn)行計算。從多種來(lái)源可以得到證據,包括CLR,瀏覽器,微軟ASP. NET,及外殼--這依賴(lài)于代碼的來(lái)源。
策略驅動(dòng)的信任模型使用代碼證據
當組合被調入內存進(jìn),CLR策略系統通過(guò)收集組合的證據并在策略環(huán)境中對證據進(jìn)行計算,從而決定賦予組合什么樣的許可權。CLR策略系統然后根據評估過(guò)的證據和組合作出的許可請求給予組合一組許可。只有在組合被給予了一組最少的許可后,或組合根本不需要許可權,組合的創(chuàng )建者才能知道組合正確運行。通過(guò)一個(gè)或多個(gè)對特定許可的請求,這樣的附加需求可以被傳送室策略系統。
根據許可請求的類(lèi)型,策略系統可以進(jìn)一步限制給予組合的許可(刪除不必要的許可)或甚至拒絕將組合裝入內存(如果運行組合所需的最小許可沒(méi)有被策略給予)。在不存在任何許可請求的情況下,組合永遠不會(huì )被給予多于策略系統將會(huì )給予的許可權限,請求只是進(jìn)一步限制得到的許可。
安全策略包含了許多代碼組,這些組包含了根據證據應給予的許可權。代碼組描述的許可可提供給從特定的安全區域獲得的組合,或提供給由特定發(fā)行商簽名過(guò)的組合,等等。盡管隨CLR發(fā)行了一組默認的代碼組(及相關(guān)許可),但管理員可以對這些CLR安全的進(jìn)行定置,以適合他們的特殊需求。記住,通過(guò)定義與證據相關(guān)的代碼組,任何東西都可以作為證據提交,只要安全策略可以使用它。
創(chuàng )建許可的的過(guò)程涉及到對證據的評估,以確定代碼組適用于哪個(gè)等級:企業(yè),機器,和用戶(hù)。策略按上面順序對這三個(gè)等級進(jìn)行評估,然后創(chuàng )建交插了三個(gè)等級的許可設置。管理員可以將任何一個(gè)策略等級標記為終結(final),這樣做應付阻止在其它等級上對策略做進(jìn)一步評估。例如,管理員可以在機器級別上對組合終止策略,這樣就會(huì )阻止用戶(hù)級策略對該組合的應用。
一旦策略完成,許可的最初設置也就創(chuàng )建了。組合通過(guò)從三個(gè)方面做出特定的請求可以?xún)?yōu)化這些許可:
第一方面是指定為了使組合運行它必須擁有的最小許可設置。如果這些許可沒(méi)有給予,那么組合將不同調入到內存,并拋出例外。
第二,可以指定一組可選的許可。盡管組合希望存在這些許可,但如果無(wú)法獲得這些許可,它仍可以調入到內存。
最后,行為特別好的組合實(shí)際上會(huì )拒絕它們所不需的有風(fēng)險的許可。這三個(gè)優(yōu)化選項是調入時(shí)作為聲明語(yǔ)句實(shí)現的。
在運行時(shí),許可是根據代碼的執行計算的。右側的圖總結了這個(gè)過(guò)程的發(fā)生順序。組合A3將它的證據和來(lái)自主機的證據提供給策略評估器。策略評估器在創(chuàng )建許可時(shí)也要考慮從組合得到的許可請求,G3。組合A3由組合A2調用,而A2又是由組合A1調用的。當組合A3執行一個(gè)引發(fā)安全檢查的操作時(shí),A2和A1獲得的許可同樣也要進(jìn)行檢查,以確保它們擁有A3所請求的許可權限。在這個(gè)過(guò)程中,此過(guò)程稱(chēng)為堆棧遍歷(walking),堆棧中每個(gè)組合的許可權限都要進(jìn)行檢查以確定所給予的權限設置是否包含安全檢查所需要的許可。如果堆棧中的每個(gè)組合被給予了安全檢查所需要的許可,調用將成功。如何任何組合沒(méi)有給予所需要的許可,堆棧遍歷過(guò)程失敗,安全例外將被拋出。
主機和組合為策略評估器提供證據,評估器使用安全策略和許可請求確定組合的許可權限。應用程序中不同運行組件的許可權限然后用于作出授權決定。
代碼訪(fǎng)問(wèn)安全堆棧遍歷可以保護代碼不受攻擊。在精通的攻擊中,惡意代碼欺騙受信任代碼執行它獨自不能運行的操作--有效地利用代碼的許可權限實(shí)現惡意的目的。對這類(lèi)攻擊,開(kāi)發(fā)人員很難進(jìn)行防備--但堆棧遍歷確保了如果涉及到了低級信任等級的代碼,有效許可將被減少到信任等級最低的代碼具有的許可。
結果,代碼將從源處獲得不同的信任等級,并在適合于特定的代碼執行環(huán)境的限制下運行。
一些活動(dòng),如讀寫(xiě)文件,顯示對話(huà)框,讀寫(xiě)環(huán)境變量,可以通過(guò)包含在框架安全構架中的.NET Framework方法實(shí)現。這就使.NET Framework能根據安全策略允許或不允許一個(gè)操作,而不需要程序員做額外的工作。盡管暴露了保護資源的管理類(lèi)的創(chuàng )建者在他們的庫中做了明確的安全需求,使用.NET Framework類(lèi)庫訪(fǎng)問(wèn)受保護資源的開(kāi)發(fā)人員可以自由地利用代碼訪(fǎng)問(wèn)安全系統;他們不必作出明確的安全調用。
管理員可以通過(guò)決定給予哪些許可來(lái)優(yōu)化安全策略,然后,依靠.NET Framework處理所有的安全操作。代碼訪(fǎng)問(wèn)安全能阻止大部分的惡意攻擊,對代碼的驗證減少了緩存溢出和其它會(huì )導致安全攻擊的不期望的行為。因此,應用程序和組件生來(lái)就受到了保護,它們免于大多數安全問(wèn)題的沖擊,而這些安全問(wèn)題一直困繞著(zhù)本地代碼的實(shí)現。
有時(shí)根據已認證的身份或根據與代碼執行上下文相關(guān)的角色作出認證決定是合適的。比如,金融和企業(yè)軟件可以通過(guò)評估角色信息的企業(yè)邏輯加強策略。根據作出請求的用戶(hù)角色可以對金融交易的數據進(jìn)行限制。出納被允許可以處理一定金額的請求,而多于該金額的所有工作需要監督人的角色來(lái)處理。
身份可以映射到登錄系統的用戶(hù),或由應用程序定義。相應的原則封裝了身份和其它相關(guān)的角色信息。
.NET Framework提供了一組加密對象,它們支持加密算法、數字簽名、散列、生成隨機數,是通過(guò)眾所周知的運算法則實(shí)現的,如RSA, DSA, Rijndael/AES, Triple DES, DES, 和 RC2, 以及MD5, SHA1, SHA-256, SHA-384 和 SHA-512散列算法。同時(shí)還支持在IETF和W3C開(kāi)發(fā)的XML數字簽名規范。.NET Framework使用加密對象支持內部服務(wù)。這些對象還作為管理代碼提供給需要加密支持的開(kāi)發(fā)人員。
指定安全性,如果要對組合運行時(shí)的行為進(jìn)行修改,根據程序員的需要,可以作出聲明式安全或強迫式安全的修改。
聲明式安全使程序員可以直接在組合代碼的元數據中為組合指定安全需求。許可請求和所有其它形式的聲明式安全是在代碼中是作為定置屬性指定的。類(lèi),屬性和方法的注釋用于優(yōu)化許可。例如,聲明式安全可用于類(lèi)的調用者在調用方法前檢查調用者是否被已知地行商簽名過(guò),或有一個(gè)特定的強名。
由于聲明屬性是組合元數據的一部分,所以組合的安全需求易于辨別??梢允褂霉ぞ邔M合進(jìn)行掃描,以發(fā)現哪些方法需要某些許可,哪些方法斷言了某些許可。
當被請求的活動(dòng)和許可在編譯時(shí)是知道時(shí),聲明式檢查可作為選擇的解決方案之一。例如,如果方法總是檢查對C:temp的寫(xiě)訪(fǎng)問(wèn)許可,那么許可檢查就會(huì )從聲明中得到好處。另一方面,如果被請求的具有訪(fǎng)問(wèn)權的位置發(fā)生了變化,那么強迫式安全也許是一個(gè)比較好的解決方案。
強迫式安全直接在代碼中實(shí)現。程序員通過(guò)程序采取安全活動(dòng),并且根據安全堆棧的狀態(tài)決定是給予還是拒絕許可。例如,當一個(gè)方法請求訪(fǎng)問(wèn)一個(gè)特定的文件時(shí),如果調用者(或方法的任何一個(gè)調用者)沒(méi)有被給予必需的許可權限,那么請求失敗。因為強迫式安全是通過(guò)程序實(shí)現的,所以滿(mǎn)足了動(dòng)態(tài)需求。如果需要對一個(gè)特定文件的訪(fǎng)問(wèn)許可,但該許可還要根據其它信息發(fā)生變化,那么,強迫式安全就是可選的解決方案。
聯(lián)系客服