ASP.NET 安全性

2022-06-27 15:46 更新

安全性

實(shí)現(xiàn)網(wǎng)站的安全性關(guān)系到如下幾方面:

  • 身份認(rèn)證:即確認(rèn)用戶身份和真實(shí)性的過(guò)程。ASP.NET 中提供了四種類型的認(rèn)證:
    • Windows 認(rèn)證
    • 表單認(rèn)證
    • 身份驗(yàn)證
    • 自定義認(rèn)證
  • 授權(quán):即定義并為特定用戶分配特定角色的過(guò)程。
  • 機(jī)密性:包括對(duì)客戶端瀏覽器和網(wǎng)絡(luò)服務(wù)器的加密。
  • 完整性:保持?jǐn)?shù)據(jù)完整性。例如,實(shí)現(xiàn)數(shù)字簽名。

基于表單的認(rèn)證

一般來(lái)講,基于表單的認(rèn)證包括編輯網(wǎng)絡(luò)配置文件以及具有驗(yàn)證碼的注冊(cè)頁(yè)面。
網(wǎng)絡(luò)配置文件可由如下代碼編寫:

<configuration>

<system.web>
    <authentication mode="Forms">
        <forms loginUrl ="login.aspx"/>
    </authentication>

    <authorization>
        <deny users="?"/>
    </authorization>
</system.web>
...
...
</configuration>

上面的代碼段中提及的 login.aspx 頁(yè)面可能會(huì)包含如下代碼,包含驗(yàn)證用的用戶名和密碼在文件之后很難編碼進(jìn)去。

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 類是用于認(rèn)證過(guò)程的。

然而,不用寫任何代碼 Visual Studio 就能夠通過(guò)網(wǎng)站管理工具輕松地?zé)o縫實(shí)現(xiàn)用戶創(chuàng)建、身份認(rèn)證和授權(quán)。這種工具能夠?qū)崿F(xiàn)用戶和角色的創(chuàng)建。

除此之外,ASP.NET 有現(xiàn)成的登錄控制系列,可以為你控制執(zhí)行所有的工作。

基于表單的安全性的實(shí)現(xiàn)

為了建立基于表單的認(rèn)證,你需要做到如下幾點(diǎn):

  • 支持認(rèn)證過(guò)程的用戶數(shù)據(jù)庫(kù)
  • 一個(gè)使用數(shù)據(jù)庫(kù)的網(wǎng)站
  • 用戶賬戶
  • 角色
  • 用戶活動(dòng)和群體活動(dòng)的限制
  • 一個(gè)顯示用戶狀態(tài)及其他信息的用戶頁(yè)面
  • 允許用戶登錄、找回密碼、修改密碼的登錄界面。

為了創(chuàng)建一個(gè)用戶,需要采取以下步驟:

第一步:選擇網(wǎng)站 -> 配置 ASP.NET 以打開網(wǎng)絡(luò)應(yīng)用管理工具。

第二步:點(diǎn)擊安全選項(xiàng)。

security_tab.jpg

第三步:選擇 'Forms based authentication' 選項(xiàng),以將認(rèn)證類型設(shè)定為 'From the Internet'。

authentication_type.jpg

第四步:點(diǎn)擊 'Create Users'。如果你已經(jīng)創(chuàng)建了角色,你正好可以在這一步把角色分配給該用戶。

create_users_link.jpg

第五步:創(chuàng)建一個(gè)網(wǎng)站,并添加如下頁(yè)面:

  • 歡迎頁(yè)面
  • 登錄頁(yè)面
  • 注冊(cè)頁(yè)面
  • 找回密碼頁(yè)面
  • 修改密碼頁(yè)面

第六步:在歡迎頁(yè)面的登錄部分設(shè)置一個(gè)登錄狀態(tài)控件。包含兩個(gè)標(biāo)準(zhǔn)框:LoggedIn 和 LoggedOut。

LoggedIn 有查看已經(jīng)登錄用戶的選項(xiàng),LoggedOut 內(nèi)有查看已經(jīng)退出用戶的選項(xiàng)。你可以在屬性窗口里改變登錄和退出的文本屬性。

login_status_control.jpg

第七步:在 LoginStatus 控件的下面設(shè)置一個(gè) LoginView 控件。你可以在此設(shè)置一些能反應(yīng)用戶是否已經(jīng)登錄的其他文本或其他控件(如超鏈接、按鈕等)。

這個(gè)控件有兩個(gè)標(biāo)準(zhǔn)框: Anonymous 框和 LoggedIn 框。選擇每種視圖,并為用戶編寫一些文本,以作為選擇標(biāo)準(zhǔn)框時(shí)要顯示的內(nèi)容。文本應(yīng)該被放在如下圖中標(biāo)紅的區(qū)域。

login_view_control.jpg

第八步:由開發(fā)者創(chuàng)建應(yīng)用用戶。你也許想要允許游客也能夠創(chuàng)建一個(gè)用戶賬戶。要實(shí)現(xiàn)這個(gè),你可以在 LoginView 控件下添加一個(gè)可以轉(zhuǎn)到注冊(cè)頁(yè)面的鏈接。

第九步:在注冊(cè)頁(yè)面設(shè)置一個(gè) CreateUserWizard 控件。設(shè)置這個(gè)控件的 ContinueDestinationPageUrl 屬性,以保證能夠轉(zhuǎn)到歡迎頁(yè)面。

createuserwizard_control.jpg

第十步:創(chuàng)建登錄頁(yè)面。在這個(gè)頁(yè)面上設(shè)置一個(gè) Login 控件。 LoginStatus 控件會(huì)自動(dòng)地連接到登錄頁(yè)面。在網(wǎng)絡(luò)配置文件里做如下改動(dòng)可以改變這種默認(rèn)設(shè)置。

例如,如果你把你的登錄頁(yè)面命名為 signup.aspx ,可以在網(wǎng)絡(luò)配置文件的 部分添加如下幾行代碼。

<configuration>
    <system.web>
        <authentication mode="Forms">
            <forms loginUrl ="signup.aspx" defaultUrl = a€?Welcome.aspxa€? />
        </authentication>
    </system.web>
</configuration>

第十一步:用戶經(jīng)常會(huì)忘記密碼。PasswordRecovery 控件幫助用戶重新獲得登錄這個(gè)賬戶。選擇登錄控件。打開它的小標(biāo)簽,并選擇 'Convert to Template'。

通過(guò)自定義這個(gè)控件的用戶界面,在登錄按鈕下方放置一個(gè)超鏈接控件,這個(gè)控件應(yīng)該是能夠鏈接到找回密碼頁(yè)面的。

passwordrecovery_control.jpg

第十二步:在找回密碼頁(yè)面設(shè)置一個(gè) PasswordRecovery 控件。這個(gè)控件需要郵件服務(wù)器把密碼發(fā)送給用戶。

passwordrecovery_control2.jpg

第十三步:在歡迎頁(yè)面的 LoginView 控件的 LoggedIn 框內(nèi)設(shè)置一個(gè)轉(zhuǎn)到修改密碼頁(yè)面的鏈接。

changepassword_control.jpg

第十四步:在修改密碼頁(yè)面設(shè)置一個(gè) ChangePassword 控件,這個(gè)控件有兩種視圖:

changepassword_control2.jpg

現(xiàn)在運(yùn)行這個(gè)應(yīng)用,觀察不同的安全操作。
可以回到網(wǎng)絡(luò)應(yīng)用管理工具,點(diǎn)擊安全選項(xiàng),來(lái)創(chuàng)建角色。點(diǎn)擊 'Create Roles' 為這個(gè)應(yīng)用來(lái)創(chuàng)建一些角色。

web_application_administration.jpg

點(diǎn)擊 'Manage Users',可以給用戶分配角色。

manage_users.jpg

IIS 認(rèn)證:SSL

安全套接層(SSL)是用來(lái)確保安全連接的協(xié)議。通過(guò)使用 SSL,瀏覽器會(huì)把送到服務(wù)器的所有數(shù)據(jù)加密,并解密來(lái)自服務(wù)器的所有數(shù)據(jù)。與此同時(shí),服務(wù)器也會(huì)對(duì)倆字瀏覽器的所有數(shù)據(jù)進(jìn)行加解密。

安全連接的 URL 使用的是 HTTPS 協(xié)議而不是 HTTP 協(xié)議。一個(gè)很小的加鎖也會(huì)被使用了安全連接的瀏覽器顯示出來(lái)。當(dāng)瀏覽器使用 SSL 主動(dòng)地與服務(wù)器進(jìn)行交流時(shí),服務(wù)器會(huì)發(fā)送一個(gè)安全證書以對(duì)服務(wù)器本身進(jìn)行認(rèn)證。

要想使用 SSL ,你需要從一個(gè)可以信任的認(rèn)證機(jī)構(gòu)(CA)購(gòu)買一個(gè)數(shù)字安全證書,并在網(wǎng)絡(luò)服務(wù)器上安裝這個(gè)證書。以下是一些可以信任的,有較好名譽(yù)認(rèn)證機(jī)構(gòu):

  • www.verisign.com
  • www.geotrust.com
  • www.thawte.com

SSL 是建立在所有主要的瀏覽器和服務(wù)器上的。要啟用 SSL,你需要安裝數(shù)字證書。不同數(shù)字證書的強(qiáng)度不同,是根據(jù)加密過(guò)程中產(chǎn)生的密鑰長(zhǎng)度而有所區(qū)別。密鑰越長(zhǎng),證書就越安全,連接也就越安全。

強(qiáng)度描述
40 比特支持大多數(shù)瀏覽器但是很容易破解。
56 比特比 40 比特的更健壯。
128 比特很難破解,但并不是所有的瀏覽器都支持。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)