邵小蘭
(常州劉國(guó)鈞高等職業(yè)技術(shù)學(xué)校,江蘇 常州 213025)
隨著網(wǎng)絡(luò)的不斷普及,網(wǎng)站的安全越來(lái)越受到網(wǎng)站用戶的關(guān)注,而保證安全的一個(gè)最基本的途徑就是登錄網(wǎng)站時(shí)使用指定的密碼。即使Web應(yīng)用程序非常安全,如果密碼環(huán)節(jié)比較薄弱,非法用戶可以通過(guò)破解密碼而潛入Web應(yīng)用程序的內(nèi)部,不僅僅Web站點(diǎn)的管理員或者服務(wù)器的管理員帳號(hào)密碼被破解,普通用戶的帳號(hào)密碼也會(huì)遭遇同樣的情況。
安全密碼就是很難被破解的密碼,人們?cè)谧?cè)網(wǎng)站時(shí)通常會(huì)選擇非常常見(jiàn)的單詞和數(shù)字。作為密碼,例如,寵物的名字,孩子們的名字,有序號(hào)碼、有序的字母串(ASDFG)等等,這種密碼很容易被破解,目前最好的解決方法是在用戶注冊(cè)時(shí),網(wǎng)站確保用戶具有高度安全性的“強(qiáng)度密碼”,是指建立一種策略,確保密碼足夠復(fù)雜,防止非法用戶很容易猜到或者破解。關(guān)于強(qiáng)度密碼策略有如下建議:
(1)密碼長(zhǎng)度最小應(yīng)該不小于七位字符。
(2)不限制密碼的最大長(zhǎng)度。
(3)支持多種字符集,包括大小寫(xiě)字母數(shù)字和標(biāo)點(diǎn)等。(4)允許使用任何鍵盤(pán)字符作為密碼。
(5)不允許使用字典單詞作為密碼或密碼的一部分。(6)不允許密碼中包含用戶名稱。
在ASP.NET中,提供了一些驗(yàn)證控件用于驗(yàn)證密碼的最小長(zhǎng)度,例如RegularExpressionValidator驗(yàn)證控件就可以實(shí)現(xiàn)此功能。主要利用了該控件的ValidationExpression屬性,使用正則表達(dá)式來(lái)驗(yàn)證密碼的長(zhǎng)度。主要代碼如下:
<asp∶RegularExpressionValidator ID="RegularExpression-Validator1"runat="server"ControlToValidate="TextBox2"ErrorMessage=”密碼長(zhǎng)度必須大于8位”></asp∶RegularExpressionValidator>,運(yùn)行界面如圖1所示:
圖1 用戶注冊(cè)頁(yè)面
RegularExpressionValidator驗(yàn)證控件的作用有限,很多情況下不能滿足用戶的驗(yàn)證需要,為此,ASP.NET提供了一種由用戶自定義驗(yàn)證條件的驗(yàn)證控件——CustomValidator控件,例如在用戶注冊(cè)時(shí),要求密碼必須大于7位,密碼內(nèi)容必須為大小寫(xiě)字母的組合,如果輸入密碼不符合驗(yàn)證的要求,CustomValidator控件就會(huì)彈出錯(cuò)誤提示信息,主要利用了CustomValidator控件的自定義驗(yàn)證函數(shù)功能,實(shí)現(xiàn)此功能的代碼如下:
盡管密碼中含有許多字符可以使密碼具有更高的安全性,并不易被推測(cè),但這樣做也可能把密碼曝露在其它類型的攻擊之下,所以對(duì)密碼所支持的字符數(shù)目加以限制也是很有必要的。通常,A-Z,a-z,0-9之間的字符和一些特殊的字符(!、@、#、$、%、^、&、*、?、/、)是可以安全使用的。可以通過(guò)驗(yàn)證控件來(lái)完成此項(xiàng)功能。在上面代碼的基礎(chǔ)上,添加兩個(gè)方法,用來(lái)驗(yàn)證數(shù)字和符號(hào)。代碼如下:
當(dāng)網(wǎng)站提示用戶輸入復(fù)雜的強(qiáng)度密碼時(shí),用戶也許會(huì)常常忘記密碼。下面給出一下如何創(chuàng)建易于記憶的強(qiáng)密碼的具體建議:
(1)使用多個(gè)人名字拼音
不要僅用熟人的姓名,例如“zhangyu”,而改用有關(guān)此人的不為他人所知的信息。例如“zhangfeng”或“fengzhang”。
(2)使用符號(hào)而不是字符
很多人往往會(huì)在自己的名字拼音后面補(bǔ)充必要的符號(hào)和數(shù)字,例如“zhang1234”,但此類密碼相對(duì)易于破解。姓“zhang”收錄在大量包含常用姓名的字典中;一旦此姓被發(fā)現(xiàn),攻擊者即僅需猜測(cè)另外四個(gè)相對(duì)簡(jiǎn)單的字符。因此,請(qǐng)改用自己可以輕松回想起來(lái)的符號(hào)替代該密碼的一個(gè)或更多字母。很多人擁有自己的富有創(chuàng)造性的譯碼方法,即使用一些相似符號(hào)和數(shù)字替換字母。例如使用“@”替換“A”,“!”替換“1”,零(0)替換“O”,以及“3”替換“E”。使用這些替換,可以認(rèn)出“@11iw0nbe@r”,“@!!isonB3ar”和“A//i$onBear”,但要猜測(cè)和破解這些密碼則難乎其難,請(qǐng)觀察鍵盤(pán)上的符號(hào),并思考進(jìn)入腦海的第一個(gè)字符,其他人可能不會(huì)想到這個(gè)字符,而用戶則會(huì)記住這個(gè)字符,現(xiàn)在就開(kāi)始使用一些此類符號(hào)作為密碼的替代符號(hào)。
(3)選擇記憶中的事件和人物
要記住一個(gè)月之后將進(jìn)行更改的強(qiáng)密碼,請(qǐng)嘗試選擇即將出現(xiàn)的人物或公共事件,借此提醒自己生活中正在發(fā)生的美好事物或自己所敬仰或喜愛(ài)的某個(gè)人。如果密碼非常有趣或可愛(ài),這個(gè)密碼則不太可能被忘記,將密碼設(shè)置成自己獨(dú)有的密碼,請(qǐng)務(wù)必使用包含兩個(gè)或多個(gè)單詞的詞組,然后插入自己的符號(hào),例如,“Zhang$hong@yu@jing”。
(4)使用單詞諧音
一般來(lái)說(shuō),攻擊者使用的密碼字典會(huì)搜索密碼中的單詞。如前文所述,不要害怕使用單詞,但務(wù)必在這些單詞中間插入大量符號(hào)。另外一個(gè)打擊攻擊者的方法是避免正確拼寫(xiě)單詞,或使用自己可以記住的有趣諧音。例如,“Run for the hills”,可以變成“R0n4dHiLLs!”或“R0n 4 d Hills!”。
(5)不要害怕創(chuàng)建長(zhǎng)密碼
如果記憶完整短語(yǔ)的效率更高,那就創(chuàng)建完整的密碼短語(yǔ)。密碼越長(zhǎng),其破解難度越大,盡管密碼很長(zhǎng),如果自己可以輕松記住,那在進(jìn)入系統(tǒng)時(shí)就會(huì)少了許多麻煩。
(6)使用語(yǔ)句的首字母
要?jiǎng)?chuàng)建易于記憶的強(qiáng)密碼,請(qǐng)首先寫(xiě)下一個(gè)易于自己記憶的大小寫(xiě)形式和標(biāo)點(diǎn)符號(hào)正確的句子。例如“我愛(ài)寶寶的媽媽”。然后,提取句子中每個(gè)字的首字母,并保留其大小寫(xiě)形式。對(duì)于上例,即得“WABBDMM”。最后使用一些非字母數(shù)字字符替換密碼中的部分字母,可以使用“@”替換“a”,或使用“!”替換“B”。,經(jīng)過(guò)此番替換,上述示例密碼將變成“W@??!DMM”,這將是一個(gè)破解難度極高而自己卻可以輕松記住的密碼,只要能記住創(chuàng)建密碼所依據(jù)的句子。
在網(wǎng)站注冊(cè)時(shí)盡管網(wǎng)站提供了密碼安全性驗(yàn)證,使用戶能夠創(chuàng)建安全性的密碼。使黑客很難破解用戶密碼,然而更嚴(yán)重的問(wèn)題是如果有人能夠盜走網(wǎng)站的整個(gè)數(shù)據(jù)庫(kù),這樣的話,用戶密碼信息就會(huì)被盜取。
解決這個(gè)問(wèn)題最好的辦法是,不將用戶實(shí)際的密碼存儲(chǔ)在數(shù)據(jù)庫(kù)中,而是存儲(chǔ)它們的加密后的字符串,當(dāng)需要對(duì)用戶進(jìn)行驗(yàn)證時(shí),只是對(duì)用戶輸入的密碼再進(jìn)行加密,然后將它與系統(tǒng)中數(shù)據(jù)庫(kù)中的加密的密碼進(jìn)行比較即可。
在ASP.NET中System.WEB.Secutity命名空間下Forms-Authentication類下的HashPasswordForStoringInConfigFile方法提供了加密方法。此方法根據(jù)指定的密碼和哈希算法生成一個(gè)適合于存儲(chǔ)在配置文件中的哈希密碼。
語(yǔ)法如下:
public static string HashPasswordForStoringInConfigFile(string password,string passwordFormat);
參數(shù)如下:
password∶要進(jìn)行哈希運(yùn)算的密碼。
passwordFormat∶要使用的哈希算法。passwordFormat是一個(gè)String,表示 System.Web.Configuration.FormsAuth-PasswordFormat枚舉值之一。FormsAuthPasswordFormat枚舉值及說(shuō)明如表1所示:
表1 FormsAuthPasswordFormat枚舉值及說(shuō)明
在本實(shí)例中,使用HashPasswordForStoringInConfigFile方法,此方法使用起來(lái)非常簡(jiǎn)單,它支持用于加密字符串的“SHA1”和“MD5”散列算法。在本實(shí)例中將密碼字符串加密成“SHA1”和“MD5”格式,運(yùn)行實(shí)例,在“會(huì)員注冊(cè)”界面中填寫(xiě)用戶名和密碼,單擊“注冊(cè)”按鈕,彈出對(duì)話框,顯示使用“SHA1”和“MD5”散列算法加密后的密碼,運(yùn)行結(jié)果如圖2所示。
圖2 加密后的密碼
在“注冊(cè)”按鈕的單擊事件中編寫(xiě)加密碼,主要代碼如下:
可將此實(shí)例做成一個(gè)通用的方法,在向數(shù)據(jù)庫(kù)中增加一個(gè)用戶記錄時(shí),使用這個(gè)方法來(lái)加密密碼,并將加密過(guò)的字符串存入數(shù)據(jù)庫(kù)中,當(dāng)用戶登錄時(shí),調(diào)用這個(gè)方法,將用戶輸入的密碼進(jìn)行加密,然后將他和數(shù)據(jù)庫(kù)中加密的密碼進(jìn)行比較。最好使用“MD5”散列算法加密,因?yàn)檫@個(gè)密碼是不可逆的不會(huì)被破解。
[1]黃毅,楊朔,陳進(jìn)原,等.C#WindowsForm編程中MD5加密的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)時(shí)代,2013,(06).
[2]衣李娜.探討ASP.NET網(wǎng)站開(kāi)發(fā)中常用的加密技術(shù)[J].信息安全與技術(shù),2015,(04).
[3]胡配祥,李新.ASP.NET安全性解決方案及其實(shí)現(xiàn)[J].淮北煤炭師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2007,(01).
[4]羅勇,蔣仕偉,張峻華.淺析基于asp.net的網(wǎng)站安全漏洞及防范[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2006,(10).
[5]吳溥峰,張玉清.數(shù)據(jù)庫(kù)安全綜述[J].計(jì)算機(jī)工程,2006,(12).