歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> NET框架下注意.NET Remoting 安全性

NET框架下注意.NET Remoting 安全性

日期:2017/2/27 9:30:37   编辑:更多Linux
  體系結構  圖 1 顯示在 Asp.Net 中駐留遠程對象時的基本 .NET Remoting 體系結構。如果主要關心安全性問題,那麼建議使用 ASP.NET 主機和 HTTP通道進行通信,因為它允許遠程對象利用 ASP.NET和 IIS 提供的基本安全服務。    有關可能使用的主機和通道類型范圍的詳細信息以及比較信息,請參見本章後面的“選擇一個主機進程” 。     圖 1. .NET Remoting 體系結構    客戶端與進程內的代理對象進行通信。可以通過遠程對象代理設置身份驗證憑證(例如,用戶名、密碼和證書等等)。方法調用通過接收鏈進行傳遞(您可以實現自己的自定義接收來執行數據加密),並到達負責通過網絡發送數據的傳輸接收。在服務器端,調用通過相同的管道進行傳遞,並向對象發出調用。    注 本章中使用的術語“代理” 一詞是指客戶端進程內的代理對象,客戶端通過該對象與遠程對象進行通信。不要將它與術語“代理服務器”混淆。    Remoting 接收  當客戶端在遠程對象上進行方法調用時,.NET Remoting 使用傳輸通道接收、自定義通道接收和格式化程序通道接收。    傳輸通道接收  傳輸通道接收通過網絡在客戶端與服務器之間傳遞方法調用。.NET提供了 HttpChannel 和 TcpChannel 類,但是,可以對體系結構進行完全擴展,並且插入您自己的自定義實現方法。    • HttpChannel。在將遠程對象駐留在 ASP.NET 中時,可以使用此通道。此通道使用 HTTP 協議在客戶端和服務器之間發送消息。    • TcpChannel。在將遠程對象駐留在 Microsoft® Windows® 操作系統服務或其他可執行文件中時,可以使用此通道。此通道使用 TCP 套接字在客戶端和服務器之間發送消息。    • 自定義通道 。自定義的傳輸通道可以使用任何基本的傳輸協議在客戶端和服務器之間發送消息。例如,自定義通道可以使用命名管道或郵件槽。    比較傳輸通道接收  下表對兩個主要的傳輸通道接收進行了比較。     自定義接收  可以在通道接收管道內的不同位置上使用自定義通道接收來修改在客戶端和服務器之間發送的消息。提供加密和解密功能的通道接收就是一個自定義通道接收的示例。    格式化程序接收  格式化程序接收獲取方法調用,並將它們序列化為可通過網絡發送的流。.NET 提供兩種格式化程序接收:    • 二進制格式化程序。它使用 BinaryFormatter 類將方法調用打包為一個序列化的二進制流,然後傳遞該流(使用 HTTP POST)以便向服務器發送數據。二進制格式化程序將 HTTP 請求中的內容類型設置為“application/octet-stream”。    與 SOAP 格式化程序相比,二進制格式化程序可以提供更高的性能。    • SOAP 格式化程序.它使用 SoapFormatter 類將方法調用打包為 SOAP 消息。在HTTP 請求中將內容類型設置為“text/XML”,並使用 HTTP POST 將其傳遞到服務器。    對駐留在 ASP.NET 中的請求進行剖析  遠程對象終結點的地址是由以 .rem 或 .soap 擴展文件名結尾的 URL 指定的(例如 http://someserver/vDir/remoteobject.soap)。當 IIS 收到遠程對象(帶有 .rem 或 .soap 擴展名)的請求時,就會將它(在 IIS 中)映射到 ASP.NET ISAPI 擴展 (Aspnet_isapi.dll) 中。ISAPI 擴展將該請求轉發到 ASP.NET 輔助進程 (Aspnet_wp.exe) 中的應用程序域。圖 2 顯示了事件的順序。     圖 2. 服務器端處理    圖 2 顯示了以下事件順序:    1.通過 HTTP 接收 .soap 或 .rem 請求,並將其映射到 Web 服務器上的特定虛擬目錄。    2.IIS 檢查 .soap/.rem 映射,然後將文件擴展名映射到 ASP.NET ISAPI 擴展 Aspnet_isapi.dll 中。    3.ISAPI 擴展將請求傳遞給 ASP.NET 輔助進程 (Aspnet_wp.exe) 中的應用程序域。如果這是在該應用程序上發送的第一個請求,則創建一個新的應用程序域。    4.調用 HttpRemotingHandlerFactory 處理程序,然後 remoting 基礎結構讀取 Web.config 文件中的 <system.runtime.remoting> 部分,它控制服務器端的對象配置(例如,單個調用或單個參數)和授權參數(使用 < authorization> 元素)。    5.Remoting 基礎結構查找包含遠程對象的程序集並對其進行實例化。    6.Remoting 基礎結構讀取 HTTP 標頭和數據流,然後在遠程對象上調用該方法。    注:在此進程中,ASP.NET 調用正常的事件處理程序序列。您可以有選擇地在 Global.asax 中實現一個或多個事件處理程序,例如, BeginRequest、AuthenticationRequest、AuthorizeRequest 等等。在請求到達遠程對象方法時,將代表已驗證用戶的 IPrincipal 對象存儲在 HttpContext.User (和 Thread.CurrentPrincipal) 中,並且可以將它用於授權。例如,使用用戶權限要求和編程角色檢查。    ASP.NET 和 HTTP 通道  Remoting 沒有其自己的安全模型。客戶端(代理)和服務器(遠程對象)之間的身份驗證和授權是通過通道和主機進程執行的。可以組合使用以下的主機和通道:    • 自定義的可執行文件和 TCP 通道。這種組合不提供任何內置的安全功能。    • ASP.NET 和 HTTP 通道.這種組合通過基本的 ASP.NET 和 IIS 安全功能提供身份驗證和授權。      ASP.NET 中駐留的對象可以利用 ASP.NET 和 IIS 的基本安全功能。它們包括:    • 身份驗證功能。在 Web.config 中配置 Windows 身份驗證功能:    <authentication mode="Windows"/>    IIS 中的設置控制所使用的 HTTP 身份驗證類型。    通用的 HTTP 標頭用於對請求進行身份驗證。可通過配置遠程對象代理為客戶端提供憑據,也可以使用默認憑據。    不能使用表單或 Passport 身份驗證,因為通道沒有提供允許客戶端訪問 Cookies 的方法,而這是這兩種身份驗證機制的一個要求。另外,表單和 Passport 身份驗證需要重定向到要求客戶端交互的登錄頁面。遠程的服務器端對象可用於非交互式的場合。    • 授權功能。使用標准的 ASP.NET 授權方法對客戶端進行授權。    可配置的授權選項包括:    • URL 授權。    • 文件授權(它需要特定的配置。有關說明,請見本章後面的“使用文件授權”)。    編程授權選項包括:    • 用戶權限要求(說明性和命令性的)。    • 使用 IPrincipal.IsInRole 進行明確的角色檢查。      • 安全通信功能。應該使用 SSL(和/或 IPSec)保護客戶端和服務器之間數據傳輸的安全。  .NET Remoting 網關守衛  ASP.NET 駐留的遠程對象使用的授權點(或者網關守衛)包括:    • IIS。如果關閉了匿名身份驗證,則 IIS只允許來自特定用戶的請求,即它可以在其自己的域或受信任的域中驗證這些用戶的身份。 IIS 還提供 IP 地址和 DNS 過濾功能。    • ASP.NET    • UrlAuthorizationModule。可以配置應用程序 Web.config 中的< authorization> 元素,控制哪些用戶和用戶組可以訪問應用程序。授權是以存儲在 HttpContext.User 中的 IPrincipal 對象為基礎。    • FileAuthorizationModule。FileAuthorizationModule 可用於遠程組件,但這需要進行特定的配置。有關說明,請參見本章後面的“使用文件授權”。    注要進行文件授權,並不要求使用模擬功能。    FileAuthorizationModule 類只對請求的文件或 URI(例如,.rem 和 .soap)執行訪問檢查,而不對在遠程對象中通過代碼訪問的文件執行訪問檢查。    • 用戶權限要求和明確的角色檢查。除了使用 IIS 和 ASP.NET 可配置的網關守衛外,還可以將用戶權限要求(以說明性方式或命令性方式)用作附加的細分訪問控制機制。通過使用用戶權限檢查,您可以根據各個用戶的標識和組成員身份(由附加到當前線程的IPrincipal 對象定義)控制對類、方法或個別代碼塊的訪問。    注用於請求角色成員身份的用戶權限檢查與調用IPrincipal.IsInRole 來測試角色成員身份不同。如果調用者不是指定角色的成員,則前者會出現異常錯誤,而後者只返回一個布爾值來確認角色成員身份。    利用 Windows 身份驗證,ASP.NET 能自動將一個代表已驗證身份用戶的WindowsPrincipal 對象連接到當前的 Web 請求(使用 HttpContext.User)。    身份驗證  在結合使用 Remoting 和 ASP.NET Web 應用程序客戶端時,就會在 Web 應用程序和遠程對象主機上進行身份驗證。遠程對象主機可以使用的身份驗證選項取決於主機類型。    駐留在 ASP.NET 中  當對象駐留在 ASP.NET 中時,可以使用 HTTP 通道在客戶端代理和服務器之間傳遞方法調用。HTTP 通道使用 HTTP 協議對服務器的遠程對象代理進行身份驗證。    以下列表說明在 ASP.NET 中駐留對象時可以使用的一組身份驗證選項:    • IIS身份驗證選項。匿名、基本、摘要、Windows 集成和證書。    • ASP.NET 身份驗證選項。Windows 身份驗證或無(用於自定義的身份驗證實現)。




Copyright © Linux教程網 All Rights Reserved