ASP.NET 安全性

2022-06-27 15:46 更新

安全性

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

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

基于表單的認證

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

<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 就能夠通過網(wǎng)站管理工具輕松地?zé)o縫實現(xiàn)用戶創(chuàng)建、身份認證和授權(quán)。這種工具能夠?qū)崿F(xiàn)用戶和角色的創(chuàng)建。

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

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

為了建立基于表單的認證,你需要做到如下幾點:

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

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

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

第二步:點擊安全選項。

security_tab.jpg

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

authentication_type.jpg

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

create_users_link.jpg

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

  • 歡迎頁面
  • 登錄頁面
  • 注冊頁面
  • 找回密碼頁面
  • 修改密碼頁面

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

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

login_status_control.jpg

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

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

login_view_control.jpg

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

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

createuserwizard_control.jpg

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

例如,如果你把你的登錄頁面命名為 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)常會忘記密碼。PasswordRecovery 控件幫助用戶重新獲得登錄這個賬戶。選擇登錄控件。打開它的小標(biāo)簽,并選擇 'Convert to Template'。

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

passwordrecovery_control.jpg

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

passwordrecovery_control2.jpg

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

changepassword_control.jpg

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

changepassword_control2.jpg

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

web_application_administration.jpg

點擊 'Manage Users',可以給用戶分配角色。

manage_users.jpg

IIS 認證:SSL

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

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

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

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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號