2009年12月13日 星期日

ASP.NET 網頁表單驗證與授權示範

Introduction

本文示範 ASP.NET 網頁表單驗證(form authentication)與授權機制。

Tested on WinXP IIS5.1 and Win2003 IIS6.0

Highlights

本文討論下列項目:

  • 設定 ASP.NET application web.config 啟用 Form Authentication 機制
  • 建立用來做使用者身分驗證的 login 頁面
  • 使用 HTTP Handler 註冊特殊副檔名的處理程式

看完本文後,你將可以完成下列工作:

  • 使用 web.config 設定 Form Authentication
  • 撰寫程式驗證使用者帳號與密碼
  • 為機密文件加上權限管制

範例情境

範例情境說明:

  • 網站部份資源有權限管制(例如網頁程式, 文件, 圖片或其它檔案),未經身分確認不准存取。
  • 若想存取受管制的資源,系統會自動顯示「登入頁面(Login.aspx)」進行身分確認

範例檔案:

  • SecureFolder 資料夾裏的(.aspx)網頁要做權限管制
  • 例: SecureFolder 裏有個 ProtectedPage.aspx,未經授權不得存取
  • 使用者若存取 SecureFolder/ProtectedPage.aspx,系統會自動顯示 SecureFolder/Login.aspx 進行身分確認
  • SecureFolder 資料夾中的部份文件也要做權限管制,例如 .png 和 .pdf 檔
  • 使用者若存取 SecureFolder 中的 .png 和 .pdf 檔,系統會自動顯示 SecureFolder/Login.aspx 進行身分確認

網頁存取流程圖如下:

image

(圖片來源:http://www.asp.net/learn/security/tutorial-07-vb.aspx)

設定 Web.config 啟用 Form Authentication 機制

  • 打開檔案總管,切到網站根目錄,例如 C:\InetPub\wwwroot
  • 編輯 Web.config 並加入下列設定,這會啟動 Form Authentication 機制。若根目錄下沒有 Web.config,請自行建立:
  • 將下列設定加到 system.web 元素下:

  • 上述設定說明:
    • loginUrl: 設定用來驗證使用者身分的網頁
    • 使用 credentials 設定使用者帳號與密碼,範例中設了 cooper 和 jason 兩個帳號。
      • passwordFormat: 設定密碼加密方式,可使用 SHA1 或 MD5 加密,Clear 表示不加密
  • 將下列設定加到 Web.config 中:
  • 上述設定說明:
    • 設定 SecureFolder 資料夾裏的檔案必須經過身份確認才能存取
    • <deny users=”?” /> 這行用來拒絕匿名使用者
  • 關閉並儲存 Web.config
  • 完整的 Web.config 內容如下:

建立 Login 頁面

  • 在 SecureFolder 下建立一個 Login.aspx
  • 將下列程式碼貼到 Login.aspx
  • 關閉並儲存 Login.aspx

建立受權限管制的網頁程式(ProtectedPage.aspx)

  • 在 SecureFolder 下建立一個 ProtectedPage.aspx
  • 將下列程式碼貼到 ProtectedPage.aspx
  • 程式說明: 利用 HttpContext.Current.User.Identity.Name 取得登入者名稱
  • 關閉並儲存 ProtectedPage.aspx

測試身分驗證範例程式

image

  • 按下 Enter, 如下圖,此時若有顯示登入頁面(Login.aspx),代表程式有正常執行:

image

  • 帳號欄輸入 cooper,密碼欄輸入 mypass,按下 Login 鈕登入。如下圖,此時若有顯示歡迎畫面,代表程式有正常執行:

image

  • 按下登出鈕,回到登入頁面,這次任意輸入不存在的帳號與密碼,按下 Login 鈕。如下圖,此時若有顯示 “您輸入的帳號或密碼有誤,請重輸登入。” 的錯誤訊息,代表程式有正常執行:

image

使用 HTTP Handler 註冊特殊副檔名的處理程式

  • 在網站根目錄建一個 bin 資料夾
  • 寫一個 FileVerifier.vb 放在 bin 資料夾裏,檔案內容如下:
  • 開一個 DOS 視窗,切換到 bin 資料夾
  • 執行底下指令把 FileVerifier.vb 編譯成 FileVerifier.dll (若找不到 vbc 指令,請打完整路徑,例如 C:\Windows\Microsoft.Net\Framework\V1.1.4322\vbc.exe) :
  • 修改 Web.config,在 location 元素底下加上底下 httpHandlers 三行設定:
  • 關閉並儲存 Web.config
  • 開啟 IIS, 在網站上按右鍵,點內容>主目錄,畫面上就會顯示網站主目錄設定的視窗,如下圖:

image

  • 按下設定鈕,在 “應用程式副檔名” ListView 中找出 .aspx,按編輯鈕,畫面上就會顯示 “新增/編輯應用程式副檔名對應” 視窗,如下圖:

image

  • 選取執行檔欄位中的字串,按下Ctrl + C 將字串複製到剪貼簿,按取消鈕關閉視窗
  • 按下新增鈕,畫面上會再顯示新的 “新增/編輯應用程式副檔名對應” 視窗,在執行檔欄位上按 Ctrl + V貼上剪貼簿的內容
  • 副檔名欄位中輸入 png (WinXP IIS5.1 須輸入 .png),如下圖:

image

  • 確定鈕關閉視窗
  • 放一張 png 圖檔到 SecureFolder 資料夾中,例如 logo.png
  • 打開 Browser,在網址列輸入 logo.png 的網址,例如 http://localhost/SecureFolder/logo.png,如下圖:

image

  • 按下 Enter,如下圖,若有顯示登入頁面,代表程式有正常執行:

image

  • 輸入正確的帳號與密碼,按 Login 登入,此時畫面若有顯示 Logo,代表程式有正常執行:

image

  • 照相同的步驟為 pdf 設定副檔名對應,即可為 pdf 檔加上權限管制

參考資料

0 意見: