ASP.NET安全問題--ASP.NET中的授權問題(前篇)

來源:互聯網
上載者:User

                              ASP.NET安全問題--ASP.NET中的授權問題(前篇)

       前言:之前的一些文章談了一些有關驗證的問題,接下來的一些文章就說下授權以及代碼訪問安全的問題。
 
       在ASP.NET應用程式中,授權就意味著允許訪問資源,資源的形式有很多了:檔案,資料庫,圖片等。授權的處理過程基本上是:建立使用者或者使用者組,然後為他們分配許可權。在.NET Framework中,有很多的方式可以實現授權,如檔案授權,URL授權以及自訂的授權。

       下面我們就來談下ASP.NET是如何控制訪問受限資源的,本篇主要講述下列問題:
       1.基於角色的安全
       2. 許可權的映射:
       3.權限物件Permission簡介

       本篇的代碼不是很多,到了下篇實戰篇中盡量給出更多的代碼。
 

系列文章連結:

ASP.NET開發安全問題

ASP.NET安全問題-- 建立安全的Web應用程式

ASP.NET安全問題--ASP.NET安全架構

ASP.NET安全問題--ASP.NET安全架構--如何?.NET安全

ASP.NET安全問題--ASP.NET生命週期中的驗證以及身分識別驗證模組

ASP.NET安全問題--Forms驗證的具體介紹(上篇)

ASP.NET安全問題--Froms驗證的具體介紹(中篇)

ASP.NET安全問題--Forms驗證(後篇)--實戰篇

ASP.NET安全問題--ASP.NET中的授權問題(前篇)

       1.基於角色的安全
       相信大家多什麼是角色的,以及基於角色的安全都有一些瞭解,他們的概念就不贅述了。在講述基於角色的安全之前,希望大家對之前講過的Identity和IPrincipal要瞭解(如果不是很清楚的,可以參看我之前的安全的系列文章)。
 
       在.NET中,可以用.NET Framework靈活的將使用者標識(Identity)和角色相結合,並且為結合後的主體定義許可權。我們之前說過:

       主體(IPrincipal)=(使用者標識:包含使用者名稱等資訊的對象)Identity+角色;
 
       我們可以定義很多的角色,然後為角色定義訪問資源的許可權。我們一般是定義角色,如定義一個Customer角色,然後使使用者的角色為Customer,然後我們定義Customer的存取權限,那麼這些訪問的許可權就應用到了那些角色為Customer的使用者上,也就是說,我們並不是為每個使用者分別定義許可權,因為那樣維護和修改起來麻煩。

       當然,我們也可以對特定的使用者單獨的進行授權,如寫入檔案。授權的方式很多,但是他們的思想是大體相同的:

        通常,一個應用程式的授權步驟如下:

       1.判斷使用者是否有合法的訪問資源的憑證(也就是我們之前談論的驗證的過程)
       2.拒絕特定的使用者訪問特定的資源
       3.允許特定的使用者訪問特定的資源

       2. 許可權的映射:

       在.NET 中,有一些內建的Permission對象,它們可以使得使用者有合適的許可權來訪問資源。在講後面的問題之前,首先說說什麼是Permission。我們知道,我們的系統中一般有很多的檔案和檔案夾,而且這些檔案或者檔案夾常常都是有訪問的許可權的,比如,我們可以把一些檔案的許可權定義為:只能管理員修改,一般的使用者唯讀,這點大家都不陌生了。

       注意:我們是通過系統來配置這些檔案或者檔案夾的許可權的。(大家應該都會)

       我們的網站,實質其實就是放在伺服器上的一些檔案,既然這些檔案在伺服器,如Win Server 2003上,那麼這些檔案肯定是有訪問的許可權的。如果你是這台伺服器的管理員,那麼你就可以對這些檔案進行任意的操作,其他的使用者就沒有這個能力了。

       現在我們假設,我們的網站是放在伺服器上,而且網站的檔案,如aspx頁面,圖片,App_Code等都在網站的檔案夾中,而且這些檔案資源的許可權早就定義好了,如唯讀。
 
       其實我們在.NET中的一些Permission類,其實就是許可權的映射。怎麼說?

       假如我們的網站檔案夾中的一個檔案,如Admin.aspx頁面,我們可以通過作業系統來定義這個檔案的存取權限(操作為:選中檔案,點擊右鍵,選擇"共用和安全",然後選擇哪些使用者可以訪問,而且這些使用者的操作是什麼,如讀,寫,安全控制等)。這些都是系統定義的一些許可權,.NET Framework就把定義在檔案上的一些許可權"取出",封裝映射在一些Permission類中,這樣我們就能用Managed 程式碼,如C#來操作這些許可權,而不用Win API(Unmanaged 程式碼)來操作。(理解如有問題,歡迎大家指正!)

 

        3.權限物件Permission簡介
       下面我們就舉一些Permission類的例子.
       FileIOPermission
       PrincipalPermission
 
       這些內建的權限物件都會保護指定的資源。如FileIOPermission對象將確保只允許授權的使用者訪問一個檔案。即,FileIOPermission對象將目前使用者的憑證映射在作業系統層級,映射的結果就是該使用者和系統中已存在的某一使用者的操作許可權相同(如IUser),那麼現在這個使用者就可以設定檔案的許可權。
 

      FileIOPermission
      FileIOPermission對象要求使用者是Windows使用者,或者ASP.NET處理過程運行在一個特定的標識下(一般是ASPNET使用者賬戶),並且根據為檔案系統中的檔案或者檔案夾定義的許可權,授予讀或者寫的許可權。即,FileIOPermission對象在檔案系統中定義的許可權上下文中驗證Principal.

       例如,在ASP.NET程式中,我們可能想要在點擊按鈕之後寫入一個檔案,那麼,檔案就應該配置必需的存取權限,並且為登入到應用程式的使用者授予必需的許可權。
 
       如果想要拒絕訪問一個特定的檔案夾,如C:\Windows,那麼我們就可以通過在運行階段拒絕對FileIOPermission對象操作的許可權來實現。我們就可以在特定的地方寫下:

[FileIOPermissionAttribute("SecurityAction.Deny,All="C:\\Windows")]

 

 

       上面是以聲明的方式寫的,我們也可以用代碼,以後講述。
 
       其中SecurityAction枚舉定義了訪問的類型,如拒絕Deny。

       上面的聲明可以在類層級,方法層級,以及程式集層級使用。這裡只是簡單的描述,大家知道就行了,具體的我們後面講述。
 
 
       PrincipalPermission
       PrincipalPermission確保調用者的上下文具有與之相關聯的被請求的Principal。這話有點繞,下面看個例子就明白了:

       下面的代碼確保:只運行名為"xiaoyang"的使用者訪問一個特定的方法:
      

 [PrincipalPermission(SecurityAction.Demand,Name="localhost\\xiaoyang"]

 

 

       將代碼放在任何一個方法的聲明的上面就行了。

       今天就先寫到這裡,理論比較多。大家見諒!
       下一篇就講述ASP.NET中的授權問題。

      

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.