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