實(shí)現(xiàn)網(wǎng)站的安全性關(guān)系到如下幾方面:
一般來(lái)講,基于表單的認(rèn)證包括編輯網(wǎng)絡(luò)配置文件以及具有驗(yàn)證碼的注冊(cè)頁(yè)面。
網(wǎng)絡(luò)配置文件可由如下代碼編寫(xiě):
<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 類(lèi)是用于認(rèn)證過(guò)程的。
然而,不用寫(xiě)任何代碼 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í)行所有的工作。
為了建立基于表單的認(rèn)證,你需要做到如下幾點(diǎn):
為了創(chuàng)建一個(gè)用戶,需要采取以下步驟:
第一步:選擇網(wǎng)站 -> 配置 ASP.NET 以打開(kāi)網(wǎng)絡(luò)應(yīng)用管理工具。
第二步:點(diǎn)擊安全選項(xiàng)。
http://wiki.jikexueyuan.com/project/asp-net/images/security_tab.jpg" alt="security_tab.jpg" />
第三步:選擇 'Forms based authentication' 選項(xiàng),以將認(rèn)證類(lèi)型設(shè)定為 'From the Internet'。
http://wiki.jikexueyuan.com/project/asp-net/images/authentication_type.jpg" alt="authentication_type.jpg" />
第四步:點(diǎn)擊 'Create Users'。如果你已經(jīng)創(chuàng)建了角色,你正好可以在這一步把角色分配給該用戶。
http://wiki.jikexueyuan.com/project/asp-net/images/create_users_link.jpg" alt="create_users_link.jpg" />
第五步:創(chuàng)建一個(gè)網(wǎng)站,并添加如下頁(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)。你可以在屬性窗口里改變登錄和退出的文本屬性。
http://wiki.jikexueyuan.com/project/asp-net/images/login_status_control.jpg" alt="login_status_control.jpg" />
第七步:在 LoginStatus 控件的下面設(shè)置一個(gè) LoginView 控件。你可以在此設(shè)置一些能反應(yīng)用戶是否已經(jīng)登錄的其他文本或其他控件(如超鏈接、按鈕等)。
這個(gè)控件有兩個(gè)標(biāo)準(zhǔn)框: Anonymous 框和 LoggedIn 框。選擇每種視圖,并為用戶編寫(xiě)一些文本,以作為選擇標(biāo)準(zhǔn)框時(shí)要顯示的內(nèi)容。文本應(yīng)該被放在如下圖中標(biāo)紅的區(qū)域。
http://wiki.jikexueyuan.com/project/asp-net/images/login_view_control.jpg" alt="login_view_control.jpg" />
第八步:由開(kāi)發(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è)面。
http://wiki.jikexueyuan.com/project/asp-net/images/createuserwizard_control.jpg" alt="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è)賬戶。選擇登錄控件。打開(kāi)它的小標(biāo)簽,并選擇 'Convert to Template'。
通過(guò)自定義這個(gè)控件的用戶界面,在登錄按鈕下方放置一個(gè)超鏈接控件,這個(gè)控件應(yīng)該是能夠鏈接到找回密碼頁(yè)面的。
http://wiki.jikexueyuan.com/project/asp-net/images/passwordrecovery_control.jpg" alt="passwordrecovery_control.jpg" />
第十二步:在找回密碼頁(yè)面設(shè)置一個(gè) PasswordRecovery 控件。這個(gè)控件需要郵件服務(wù)器把密碼發(fā)送給用戶。
http://wiki.jikexueyuan.com/project/asp-net/images/passwordrecovery_control2.jpg" alt="passwordrecovery_control2.jpg" />
第十三步:在歡迎頁(yè)面的 LoginView 控件的 LoggedIn 框內(nèi)設(shè)置一個(gè)轉(zhuǎn)到修改密碼頁(yè)面的鏈接。
http://wiki.jikexueyuan.com/project/asp-net/images/changepassword_control.jpg" alt="changepassword_control.jpg" />
第十四步:在修改密碼頁(yè)面設(shè)置一個(gè) ChangePassword 控件,這個(gè)控件有兩種視圖:
http://wiki.jikexueyuan.com/project/asp-net/images/changepassword_control2.jpg" alt="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)建一些角色。
http://wiki.jikexueyuan.com/project/asp-net/images/web_application_administration.jpg" alt="web_application_administration.jpg" />
點(diǎn)擊 'Manage Users',可以給用戶分配角色。
http://wiki.jikexueyuan.com/project/asp-net/images/manage_users.jpg" alt="manage_users.jpg" />
安全套接層(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è)安全證書(shū)以對(duì)服務(wù)器本身進(jìn)行認(rèn)證。
要想使用 SSL ,你需要從一個(gè)可以信任的認(rèn)證機(jī)構(gòu)(CA)購(gòu)買(mǎi)一個(gè)數(shù)字安全證書(shū),并在網(wǎng)絡(luò)服務(wù)器上安裝這個(gè)證書(shū)。以下是一些可以信任的,有較好名譽(yù)認(rèn)證機(jī)構(gòu):
SSL 是建立在所有主要的瀏覽器和服務(wù)器上的。要啟用 SSL,你需要安裝數(shù)字證書(shū)。不同數(shù)字證書(shū)的強(qiáng)度不同,是根據(jù)加密過(guò)程中產(chǎn)生的密鑰長(zhǎng)度而有所區(qū)別。密鑰越長(zhǎng),證書(shū)就越安全,連接也就越安全。
| 強(qiáng)度 | 描述 |
|---|---|
| 40 比特 | 支持大多數(shù)瀏覽器但是很容易破解。 |
| 56 比特 | 比 40 比特的更健壯。 |
| 128 比特 | 很難破解,但并不是所有的瀏覽器都支持。 |