1 / 164

Chapter 13

Chapter 13. 網站安全管理基礎. 本章提要. 13 - 1 ASP.NET 的安全管理機制 13 - 2 使用會員管理機制 13 - 3 登入控制項 13 - 4 會員維護相關控制項 13 - 5 使用者設定檔. 網站安全管理基礎. 不管是基於保護網站資訊、限制使用者可存取的網頁;或僅只是要為網站提供一些個人化的功能 , 都必須為瀏覽網頁的使用者 『 驗明正身 』, 也就是透過安全管理的驗證機制 , 辨明瀏覽網頁者的身份。 本章就來介紹 ASP.NET 2.0 的安全驗證機制 , 及如何在網頁上實作驗證功能。.

satin
Download Presentation

Chapter 13

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 13 網站安全管理基礎

  2. 本章提要 • 13 - 1 ASP.NET 的安全管理機制 • 13 - 2 使用會員管理機制 • 13 - 3 登入控制項 • 13 - 4 會員維護相關控制項 • 13 - 5 使用者設定檔

  3. 網站安全管理基礎 • 不管是基於保護網站資訊、限制使用者可存取的網頁;或僅只是要為網站提供一些個人化的功能, 都必須為瀏覽網頁的使用者『驗明正身』, 也就是透過安全管理的驗證機制, 辨明瀏覽網頁者的身份。 • 本章就來介紹 ASP.NET 2.0 的安全驗證機制, 及如何在網頁上實作驗證功能。

  4. 13 - 1 ASP.NET 的安全管理機制 • ASP.NET 的安全管理可分為驗證與授權兩個層次: • 驗證 (Authentication):簡單的說, 驗證就是查核使用者身份的動作, 例如常見的 Web-Mail 應用, 當我們要連上自己的網路信箱時, 要輸入使用者名稱和密碼, 通過驗證後才能讀信、寫信。

  5. ASP.NET 的安全管理機制 • 授權 (Authorization):授權則是指通過驗證的使用者, 對於網站中各項資源有何存取權限。 例如網路論壇的管理者, 即被授權可以管理論壇的會員帳號、編輯和刪除所有文章等;而一般的註冊會員, 則只能發表新文章, 或是編輯自己發表的文章。

  6. ASP.NET 的安全管理機制 • ASP.NET 即是透過驗證和授權來做網頁的安全管理, 例如系統管理員可設定:使用者通過驗證後才能存取網頁、而權限不同的使用者, 則可執行不同的功能或是瀏覽不同的網頁等等。 • 驗證和授權的基本設定都是放在 Web.Config 之中, 以下就來介紹 Web.Config 中相關標籤的用法。

  7. IIS 伺服器的安全管理 • ASP.NET 動態網頁需放在 IIS 伺服器上執行, 當使用者要瀏覽一個 ASP.NET 網頁時, 當然是先向伺服器提出要求。 • 因此不管這個 ASP.NET 網頁有沒有使用本章介紹的安全控管機制, 在提出要求時, 就會先進入如下的安全驗證程序, 通過後 IIS 才會進一步執行 ASP.NET 網頁:

  8. IIS 伺服器的安全管理 • 1. 提出要求的 IP 位址是在允許存取網站之列。 • 2. 使用者需通過 Windows 安全驗證;不過 IIS 預設允許匿名存取, 且會以網站設定的帳號登入。 • 3. ASP.NET 網頁所在的網站或資料夾有開放可『執行』網頁的權限。 • 4. ASP.NET 網頁若是存於 NTFS 資料夾, 則登入的身份需擁有該 .aspx 檔的存取權限。

  9. IIS 伺服器的安全管理

  10. IIS 伺服器的安全管理 • 通過上述安全檢查後, 該 ASP.NET 網頁才會被執行, 並進一步傳回執行結果, 或是再進入 ASP.NET 的安全檢查程序。 • 關於 IIS 安全設定的詳細資訊, 可參見 IIS 線上說明;本書附錄則會介紹如何在 Windows XP 安裝 IIS 伺服器。

  11. Web.Config 的驗證設定 • ASP.NET 支援的驗證方式有下列 3 種: • Windows 驗證:使用 Windows 的網域或本機帳戶進行驗證。使用此法時, 就是直接承襲 IIS 的 Windows 驗證結果, 因此網頁不需再自行做驗證。 • Forms 驗證:在網頁中詢問使用者名稱及密碼進行驗證。本書以下都將此種驗證稱為表單驗證。

  12. Web.Config 的驗證設定 • Passport 驗證:使用微軟的 .NET Passport (現更名為 Windows Live!) 系統進行驗證, 需另外安裝 Passport SDK 才能使用, 因此本書將不介紹。 • 如上所列, 使用 Windows 驗證時, ASP.NET 並不需進行『驗證』的動作;而使用 Passport 驗證又需額外的開發套件才能使用, 因此本章就將重點放在表單驗證。

  13. Web.Config 的驗證設定 • 要使用表單驗證, 可在 Web.config 的 <system.web> 標籤下使用 <authentication> 標籤設定:

  14. Web.Config 的驗證設定 • 啟用表單驗證後, 可在 <authentication> 標籤下加上 <forms> 標籤設定驗證相關參數, 但在進一步說明這些設定前, 我們先認識一下表單驗證的運作方式。 • 網站使用表單驗證時, 當有瀏覽器提出瀏覽 ASP.NET 網頁的要求, 即進入 ASP.NET 的安全管理程序:

  15. Web.Config 的驗證設定 • 1. ASP.NET 的驗證模組會檢查瀏覽者是否持有驗證使用者身份的 Ticket, 若無則進入網站所設定的登入網頁, 要求瀏覽者進行驗證。 • 2. 瀏覽者通過驗證後, 系統會產生記錄登入資訊的 Ticket, 此 Ticket 可存於 Cookie 或以 URL 查詢字串的形式存在。

  16. Web.Config 的驗證設定 • 3. 之後瀏覽者繼續瀏覽網站中的任何網頁時, ASP.NET 即可由 Ticket 取得使用者身份, 並檢查該身份是否有足夠授權存取網頁, 有授權即允許存取網頁。 • 至於代表驗證通過的 Ticket 是用 Cookie 或其它方式儲存、Cookie 的效期為何, 這些都可在 <forms> 標籤中用下列屬性來設定:

  17. Web.Config 的驗證設定 • cookieless:設定 Ticket 的存放方式, 可為下列值: • UseCookies:以 Cookie 存放驗證的 Ticket。 • UseUri:不使用 Cookie, Ticket 會以編碼過的方式呈現在 URL 中。 • AutoDetect:自動偵測, 若瀏覽端支援 Cookie 時就會選用 Cookie。 • UseDeviceProfile:此為預設值, 表示依 machine.config 中的設定, 依裝置類型決定是否使用 Cookie。

  18. Web.Config 的驗證設定 • name:指定 cookie 的名稱, 預設值為 ".ASPXAUTH"。 • path:指定 cookie 的路徑名稱, 預設值為 "\", 也就是根目錄。 • timeout:指定 cookie 的有效時間 (分鐘), 預設值為 30。

  19. Web.Config 的驗證設定 • slidingExpiration:設定 cookie 有效時間,是否要隨使用者重新上線而自動延長。預設值為 "False", 亦即不延長;若設為 "True", 則在 cookie 的有效時間快到期前, 使用者又重新連上網站, cookie 的有效時間會自動改為從這一次登入的時間開始計算。

  20. Web.Config 的驗證設定 • protection:指定 Ticket 是否加密及查驗 (validation), 可設為: • All:要加密及查驗。 • None:都不要。 • Encryption:只做加密。 • Validation:只做查驗。

  21. Web.Config 的驗證設定 • loginUrl:當瀏覽者尚未通過驗證時, 會導向至此屬性所指定的驗證網頁。預設值為 "login.aspx"。 • defaultUrl:當瀏覽者過驗證通過後, 會導向至此屬性所指網頁。預設值為 "Default.aspx"。

  22. Web.Config 的驗證設定 • 例如以下的片段是設定驗證通過後, 導向到 "memberOnly.aspx" 網頁, 且驗證通過後, cookie 會保留 1 天:

  23. Web.Config 的授權設定 • 設好驗證方式後, 若要再進一步控管使用者可瀏覽哪些網頁, 就需加入 <authorization> 標籤設定授權方式。 • 設定方式是在 <authorization>...<authorization> 內加入 <allow/> 及 <deny/> 標籤, 指定要授權或拒絕使用者存取網站或做何種操作:

  24. Web.Config 的授權設定 • <allow/> 及 <deny/> 標籤可使用的屬性如下: • users:要設定授權的使用者名稱, 若同時設定多人, 可用逗號分隔。另外也可用兩個符號:"?" 表示所有匿名 (Anonymous) 使用者;"*" 則表示所有的使用者。

  25. Web.Config 的授權設定 • roles:除了直接指名使用者, 也可用此屬性指定授權對象的『角色』, 角色 (role) 的用途類似於 Windows 中的群組帳戶, 我們可將一組使用者設為相同的角色, 再設定此角色的授權, 如此一來就等於設定這一組使用者的授權。 關於如何建立角色, 會在下一節設定。

  26. Web.Config 的授權設定 • verbs:設定對 HTTP 通訊協定動作的授權, 可設定的值包括 GET、HEAD、POST、DEBUG, 若要同時列出多個值則要用逗號分隔;預設值為 "*", 表示全部項目。 • 以下片段就是拒絕所有匿名使用者存取任何網頁的授權設定:

  27. 表單驗證的基礎 • 在 ASP.NET 中, 共有兩套實作表單驗證的方式, 其中之一為早期 ASP.NET 即提供, 使用 FormAuthentication 類別進行驗證的方式;另一個則是 ASP.NET 2.0 新增的會員管理機制。 • 本節先介紹前者, 13-2 節再介紹會員機制。

  28. 表單驗證的基礎 • 建構使用 FormAuthentication 類別驗證的系統, 除了前述修改 Web.Config 的設定外, 還必須: • 建立使用者帳號及密碼。 • 在網頁中用 FormAuthentication 類別的靜態 (static) 方法進行驗證相關操作。

  29. 建立使用者帳號及密碼 • 使用表單驗證時, 如果要用 FormAuthentication 類別提供的方法進行驗證, 則需將帳號及密碼記錄在 Web.config 之中。 • 若想將帳號 / 密碼存於資料庫或文字檔, 則進行驗證時, 就必須自行用程式讀出帳號 / 密碼, 並與瀏覽者輸入的帳號 / 密碼進行比對。

  30. 建立使用者帳號及密碼 • 要將帳號及密碼存放在 Web.config 之中, 需在 <forms> 標籤內加入 <credentials> 標籤, 然後在 <credentials> 標籤中可用 <user/> 標籤建立帳號及密碼, 格式如下:

  31. 帳號 建立使用者帳號及密碼 • <credentials> 的 passwordFormat 屬性, 是用來設定 <user/> 標籤中密碼字串的格式。若 passwordFormat 屬性設為 "Clear" 表示 password 屬性的字串就是密碼字串: • 若覺得將密碼字串直接存於 Web.config 中安全性太低, 則可改存編碼後的字串。

  32. 建立使用者帳號及密碼 • 此時可將 <credentials> 的 passwordFormat 屬性設為 “MD5” 或 “SHA1”, 表示 Web.config 中記錄的是以 MD5 (Message Digest 5) 或 SHA1 (Secure Hash Algorithm) 雜湊演算法編碼過後的字串。 • 例如密碼 “123” 經過 MD5 編碼後的字串是 "202CB962AC59075B964B07152D234B70", 此時 <user/> 標籤內就需寫成:

  33. 建立使用者帳號及密碼 • 如何產生編碼過的密碼字串, 請參見後面方框的說明, 在本節的範例仍使用未編碼的密碼做示範。 • 所以我們就先在網站的 Web.config 中, 找到 <authentication> 標籤, 將它修改成如下的內容, 並加上拒絕匿名使用者存取的設定:

  34. 建立使用者帳號及密碼

  35. 建立使用者帳號及密碼 • 以上我們設定了使用表單驗證, 並將預設登入網頁設為 Ch13-01.aspx (稍後建立), 同時建立一組帳號 / 密碼:ken / 123。 • 另外我們也將網站設為拒絕匿名使用者存取, 所以一定要登入才能存取網頁, 以下就來看如何在網頁中驗證使用者。

  36. 產生編碼的密碼字串 • 要用程式產生編碼過後的密碼字中, 可使用 FormsAuthentication 類別的靜態方法 HashPasswordForStoringInConfigFile(), 以密碼字串及演算法名稱 (“MD5” 或 “SHA1”) 為參數呼叫此方法, 即會傳回編碼過的字串內容, 例如: • 則最後 md5pass 的值就是 "123" 經過 MD5 演算法編碼後的字串。

  37. 在網頁中進行驗證 • 剛剛在 Web.Config 中設定了預設的登入網頁為 Ch13-01.aspx, 因此我們就來設計這個登入網頁, 網頁中使用兩個 TextBox 以供輸入帳號及密碼, 再加上一個登入按鈕:

  38. 在網頁中進行驗證

  39. 在網頁中進行驗證 • 在登入按鈕的事件處理程序中, 要做的就是驗證瀏覽者所輸入的帳號及密碼是否與 Web.config 中設定的相同, 此動作可用 FormsAuthentication 的 Authenticate() 方法進行, 呼叫時的參數就是帳號及密碼, 驗證通過則傳回 True。 • 所以按鈕的處理程序可寫成:

  40. 在網頁中進行驗證

  41. 在網頁中進行驗證 • 第 9 行呼叫的 RedirectFromLoginPage() 會在驗證成功時, 將登入者導向到指定的網頁:若使用者是從網站中其它網頁導向進來, 此方法會讓使用者回到該網頁;否則就是自動連上 <forms> 標籤 defaultUrl 屬性所指的網頁 (預設為 Default.aspx)。 RedirectFromLoginPage() 的第 1 個參數為帳號名稱, 如此可讓轉向過去的網頁取得使用者資訊, 第 2 個參數則是設定是否要將登入資訊存於 Cookie 中。

  42. 在網頁中進行驗證 • 如果要由程式指定轉向的網頁, 可加上網頁名稱 (相對路徑) 字串當成第 3 個參數。 • 第 11 行則會在 Authentication() 方法傳回 False 時顯示『登入失敗』的訊息。 • 為了測試導向功能, 我們再設計一個 Ch13-02.aspx, 此網頁只有一段歡迎訊息及一個 Literal 控制項。

  43. 在網頁中進行驗證 • 我們讓網頁載入時, 就會將登入的使用者名稱顯示在 Literal 控制項中, 使用者名稱的取得方式, 是使用 Page 的 User 物件, 並透過其 Identity.Name 屬性取得:

  44. 在網頁中進行驗證 • 將兩個檔案都存檔後, 請先用瀏覽器開啟 Ch13-02.aspx, 此時因尚未通過驗證, 因此會自動導到 Ch13-01.aspx 網頁:

  45. 在網頁中進行驗證 • 以上就是一個簡單的表單驗證範例, 由建立的過程中可發現, 此種設計方式並不適用於使用者較多的網站:

  46. 在網頁中進行驗證 • 要將帳號 / 密碼一一加到 Web.config 中非常不便, 如果要將密碼字串編碼, 還需另行處理。 • Web.config 的帳號並不支援群組帳號 / 角色這類功能, 因此網站中如要對多人做不同的授權, 設定工作也很鎖碎。 • 若要將帳號 / 密碼存於資料庫或其它位置, 則需自行撰寫讀取及比對帳號 / 密碼的驗證程式。

  47. 在網頁中進行驗證 • 因此在 ASP.NET 2.0 增加了一套功能完整的會員 (Membership) 與角色 (Role) 管理機制, 並提供相對應的控制項, 讓登入帳號的建立與管理、權限管理、網頁的設計都更加方便。 • 本章後續內容就以建立會員系統及相關控制項的使用為例來說明

  48. 13 - 2 使用會員管理機制 • ASP.NET 2.0 的會員管理是建構於表單驗證系統上的新功能, 其特色包括: • 所有使用者的登入資料 (會員資料) 都存於 SQL Server 2005 Express 資料庫中。 • 提供角色管理, 將多位會員設為同一角色, 再透過角色設定存取權限, 就不需一一設定個別會員的授權。 • 提供管理介面管理會員與角色。 • 提供登入及基本會員新增、維護功能的控制項, 方便網頁開發。

  49. 使用會員管理機制 • 會員與角色資料庫是以資料庫檔案的形式, 存於網站的 App_Data 資料夾下。換言之, 網頁執行時, 會以使用者執行個體的方式執行 SQL Server 2005 Express, 並附加此會員資料庫以便存取。 • 如果想使用其它的資料來源, 必須另行設定及撰寫程式, 詳細資訊請參見 MSDN 網站上的說明。

  50. 建立會員及會員資料庫 • 雖然資料是存於 SQL Server 2005 Express 資料庫, 但我們不必自行建立、管理資料庫, 所有的會員管理動作, 都可透過 ASP.NET 應用程式管理員進行。 • 只要逕行建立第一個會員, ASP.NET 應用程式管理員就會替我們建立必要的資料庫及資料表。請在 VWD 中執行『網站 / ASP.NET 組態』命令, 並依如下步驟建立第 1 個會員:

More Related