- ASP.NET 教程
- ASP.NET - 首頁
- ASP.NET - 簡介
- ASP.NET - 環境
- ASP.NET - 生命週期
- ASP.NET - 第一個示例
- ASP.NET - 事件處理
- ASP.NET - 伺服器端
- ASP.NET - 伺服器控制元件
- ASP.NET - HTML 伺服器控制元件
- ASP.NET - 客戶端
- ASP.NET - 基本控制元件
- ASP.NET - 指令
- ASP.NET - 狀態管理
- ASP.NET - 驗證器
- ASP.NET - 資料庫訪問
- ASP.NET - ADO.net
- ASP.NET - 檔案上傳
- ASP.NET - 廣告輪播
- ASP.NET - 日曆控制元件
- ASP.NET - 多檢視
- ASP.NET - 面板控制元件
- ASP.NET - AJAX 控制元件
- ASP.NET - 資料來源
- ASP.NET - 資料繫結
- ASP.NET - 自定義控制元件
- ASP.NET - 個性化
- ASP.NET - 錯誤處理
- ASP.NET - 除錯
- ASP.NET - LINQ
- ASP.NET - 安全性
- ASP.NET - 資料快取
- ASP.NET - Web 服務
- ASP.NET - 多執行緒
- ASP.NET - 配置
- ASP.NET - 部署
- ASP.NET 資源
- ASP.NET - 快速指南
- ASP.NET - 有用資源
- ASP.NET - 討論
ASP.NET - 安全性
在網站中實現安全性包含以下幾個方面
身份驗證:它是確保使用者身份和真實性的過程。ASP.NET 允許四種類型的身份驗證
- Windows 身份驗證
- 表單身份驗證
- Passport 身份驗證
- 自定義身份驗證
授權:它是定義和分配特定角色給特定使用者的過程。
機密性:它涉及到加密客戶端瀏覽器和 Web 伺服器之間的通訊通道。
完整性:它涉及到維護資料的完整性。例如,實現數字簽名。
基於表單的身份驗證
傳統上,基於表單的身份驗證涉及編輯 web.config 檔案並在其中新增一個具有適當身份驗證程式碼的登入頁面。
可以編輯 web.config 檔案並在其中寫入以下程式碼
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl ="login.aspx"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
...
...
</configuration>
上面程式碼片段中提到的 login.aspx 頁面可能具有以下程式碼隱藏檔案,其中使用者名稱和密碼被硬編碼用於身份驗證。
protected bool authenticate(String uname, String pass)
{
if(uname == "Tom")
{
if(pass == "tom123")
return true;
}
if(uname == "Dick")
{
if(pass == "dick123")
return true;
}
if(uname == "Harry")
{
if(pass == "har123")
return true;
}
return false;
}
public void OnLogin(Object src, EventArgs e)
{
if (authenticate(txtuser.Text, txtpwd.Text))
{
FormsAuthentication.RedirectFromLoginPage(txtuser.Text, chkrem.Checked);
}
else
{
Response.Write("Invalid user name or password");
}
}
請注意,FormsAuthentication 類負責身份驗證過程。
但是,Visual Studio 允許您透過網站管理工具輕鬆實現使用者建立、身份驗證和授權,而無需編寫任何程式碼。此工具允許建立使用者和角色。
除此之外,ASP.NET 還提供現成的登入控制元件集,其中包含執行所有工作的控制元件。
實現基於表單的安全
要設定基於表單的身份驗證,您需要以下內容
- 支援身份驗證過程的使用者資料庫
- 使用該資料庫的網站
- 使用者帳戶
- 角色
- 限制使用者和組活動
- 預設頁面,用於顯示使用者的登入狀態和其他資訊。
- 登入頁面,允許使用者登入、檢索密碼或更改密碼
要建立使用者,請執行以下步驟
步驟 (1):選擇網站 -> ASP.NET 配置以開啟 Web 應用程式管理工具。
步驟 (2):單擊“安全”選項卡。
步驟 (3):透過選擇“來自 Internet”單選按鈕,將身份驗證型別選擇為“基於表單的身份驗證”。
步驟 (4):單擊“建立使用者”連結以建立一些使用者。如果您已經建立了角色,則可以在此階段將角色分配給使用者。
步驟 (5):建立一個網站並新增以下頁面
- Welcome.aspx
- Login.aspx
- CreateAccount.aspx
- PasswordRecovery.aspx
- ChangePassword.aspx
步驟 (6):從工具箱的登入部分將 LoginStatus 控制元件放置在 Welcome.aspx 上。它有兩個模板:LoggedIn 和 LoggedOut。
在 LoggedOut 模板中,有一個登入連結;在 LoggedIn 模板中,控制元件上有一個登出連結。您可以從“屬性”視窗更改控制元件的登入和登出文字屬性。
步驟 (7):在 LoginStatus 控制元件下方從工具箱放置一個 LoginView 控制元件。在這裡,您可以放置文字和其他控制元件(超連結、按鈕等),這些控制元件根據使用者是否登入而顯示。
此控制元件有兩個檢視模板:匿名模板和已登入模板。選擇每個檢視併為使用者編寫一些文字,以便為每個模板顯示。文字應放置在標記為紅色的區域。
步驟 (8):應用程式的使用者由開發人員建立。您可能希望允許訪客建立使用者帳戶。為此,在 LoginView 控制元件下方新增一個連結,該連結應連結到 CreateAccount.aspx 頁面。
步驟 (9):在建立帳戶頁面上放置一個 CreateUserWizard 控制元件。將此控制元件的 ContinueDestinationPageUrl 屬性設定為 Welcome.aspx。
步驟 (10):建立登入頁面。在頁面上放置一個 Login 控制元件。LoginStatus 控制元件會自動連結到 Login.aspx。要更改此預設設定,請在 web.config 檔案中進行以下更改。
例如,如果您想將登入頁面命名為 signup.aspx,請將以下行新增到 web.config 的 <authentication> 部分
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl ="signup.aspx" defaultUrl = “Welcome.aspx†/>
</authentication>
</system.web>
</configuration>
步驟 (11):使用者經常忘記密碼。PasswordRecovery 控制元件幫助使用者訪問帳戶。選擇 Login 控制元件。開啟其智慧標記並單擊“轉換為模板”。
自定義控制元件的 UI 以在登入按鈕下方放置一個超連結控制元件,該控制元件應連結到 PassWordRecovery.aspx。
步驟 (12):在密碼恢復頁面上放置一個 PasswordRecovery 控制元件。此控制元件需要一個電子郵件伺服器才能將密碼傳送給使用者。
步驟 (13):在 Welcome.aspx 中的 LoginView 控制元件的 LoggedIn 模板中建立到 ChangePassword.aspx 頁面的連結。
步驟 (14):在更改密碼頁面上放置一個 ChangePassword 控制元件。此控制元件也有兩個檢視。
現在執行應用程式並觀察不同的安全操作。
要建立角色,請返回到 Web 應用程式管理工具並單擊“安全”選項卡。單擊“建立角色”併為應用程式建立一些角色。
單擊“管理使用者”連結並將角色分配給使用者。
IIS 身份驗證:SSL
安全套接字層或 SSL 用於確保安全連線的協議。啟用 SSL 後,瀏覽器會加密傳送到伺服器的所有資料,並解密來自伺服器的所有資料。同時,伺服器會加密和解密到瀏覽器和來自瀏覽器的所有資料。
安全連線的 URL 以 HTTPS 開頭,而不是 HTTP。使用安全連線的瀏覽器會顯示一個小鎖。當瀏覽器首次嘗試使用 SSL 透過安全連線與伺服器通訊時,伺服器會透過傳送其數字證書來進行身份驗證。
要使用 SSL,您需要從受信任的證書頒發機構 (CA) 購買數字安全證書並將其安裝在 Web 伺服器中。以下是一些受信任和信譽良好的證書頒發機構
- www.verisign.com
- www.geotrust.com
- www.thawte.com
SSL 內置於所有主要的瀏覽器和伺服器中。要啟用 SSL,您需要安裝數字證書。各種數字證書的強度因加密期間生成的金鑰長度而異。長度越長,證書越安全,因此連線也越安全。
| 強度 | 描述 |
|---|---|
| 40 位 | 大多數瀏覽器都支援,但易於破解。 |
| 56 位 | 比 40 位更強。 |
| 128 位 | 極難破解,但並非所有瀏覽器都支援。 |