大多數(shù)的web開(kāi)發(fā)者都會(huì)遇到設(shè)計(jì)用戶賬號(hào)系統(tǒng)的需求。賬號(hào)系統(tǒng)最重要的一個(gè)方面就是如何保護(hù)用戶的密碼。一些大公司的用戶數(shù)據(jù)庫(kù)泄露事件也時(shí)有發(fā)生,所以我們必須采取一些措施來(lái)保護(hù)用戶的密碼,即使網(wǎng)站被攻破的情況下也不會(huì)造成較大的危害。如果你還在存儲(chǔ)用戶密碼的MD5,那可真的有點(diǎn)弱了。
創(chuàng)新互聯(lián)成立以來(lái)不斷整合自身及行業(yè)資源、不斷突破觀念以使企業(yè)策略得到完善和成熟,建立了一套“以技術(shù)為基點(diǎn),以客戶需求中心、市場(chǎng)為導(dǎo)向”的快速反應(yīng)體系。對(duì)公司的主營(yíng)項(xiàng)目,如中高端企業(yè)網(wǎng)站企劃 / 設(shè)計(jì)、行業(yè) / 企業(yè)門(mén)戶設(shè)計(jì)推廣、行業(yè)門(mén)戶平臺(tái)運(yùn)營(yíng)、app軟件開(kāi)發(fā)公司、成都手機(jī)網(wǎng)站制作、微信網(wǎng)站制作、軟件開(kāi)發(fā)、成都服務(wù)器托管等實(shí)行標(biāo)準(zhǔn)化操作,讓客戶可以直觀的預(yù)知到從創(chuàng)新互聯(lián)可以獲得的服務(wù)效果。
保護(hù)密碼最好的的方式就是使用帶鹽的密碼hash(salted password hashing).對(duì)密碼進(jìn)行hash操作是一件很簡(jiǎn)單的事情,但是很多人都犯了錯(cuò)。接下來(lái)我希望可以詳細(xì)的闡述如何恰當(dāng)?shù)膶?duì)密碼進(jìn)行hash,以及為什么要這樣做。
重要提醒
如果你打算自己寫(xiě)一段代碼來(lái)進(jìn)行密碼hash,那么趕緊停下吧。這樣太容易犯錯(cuò)了。這個(gè)提醒適用于每一個(gè)人,不要自己寫(xiě)密碼的hash算法 !關(guān)于保存密碼的問(wèn)題已經(jīng)有了成熟的方案,那就是使用phpass或者本文提供的源碼。
什么是hash
hash("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
hash("hbllo") = 58756879c05c68dfac9866712fad6a93f8146f337a69afe7dd238f3364946366
hash("waltz") = c0e81794384491161f1777c232bc6bd9ec38f616560b120fda8e90f383853542
Hash算法是一種單向的函數(shù)。它可以把任意數(shù)量的數(shù)據(jù)轉(zhuǎn)換成固定長(zhǎng)度的“指紋”,這個(gè)過(guò)程是不可逆的。而且只要輸入發(fā)生改變,哪怕只有一個(gè)bit,輸出的hash值也會(huì)有很大不同。這種特性恰好合適用來(lái)用來(lái)保存密碼。因?yàn)槲覀兿M褂靡环N不可逆的算法來(lái)加密保存的密碼,同時(shí)又需要在用戶登陸的時(shí)候驗(yàn)證密碼是否正確。
在一個(gè)使用hash的賬號(hào)系統(tǒng)中,用戶注冊(cè)和認(rèn)證的大致流程如下:
1, 用戶創(chuàng)建自己的賬號(hào)
2, 用戶密碼經(jīng)過(guò)hash操作之后存儲(chǔ)在數(shù)據(jù)庫(kù)中。沒(méi)有任何明文的密碼存儲(chǔ)在服務(wù)器的硬盤(pán)上。
3, 用戶登陸的時(shí)候,將用戶輸入的密碼進(jìn)行hash操作后與數(shù)據(jù)庫(kù)里保存的密碼hash值進(jìn)行對(duì)比。
4, 如果hash值完全一樣,則認(rèn)為用戶輸入的密碼是正確的。否則就認(rèn)為用戶輸入了無(wú)效的密碼。
5, 每次用戶嘗試登陸的時(shí)候就重復(fù)步驟3和步驟4。
在步驟4的時(shí)候不要告訴用戶是賬號(hào)還是密碼錯(cuò)了。只需要顯示一個(gè)通用的提示,比如賬號(hào)或密碼不正確就可以了。這樣可以防止攻擊者枚舉有效的用戶名。
還需要注意的是用來(lái)保護(hù)密碼的hash函數(shù)跟數(shù)據(jù)結(jié)構(gòu)課上見(jiàn)過(guò)的hash函數(shù)不完全一樣。比如實(shí)現(xiàn)hash表的hash函數(shù)設(shè)計(jì)的目的是快速,但是不夠安全。只有加密hash函數(shù)(cryptographic hash functions)可以用來(lái)進(jìn)行密碼的hash。這樣的函數(shù)有SHA256, SHA512, RipeMD, WHIRLPOOL等。
一個(gè)常見(jiàn)的觀念就是密碼經(jīng)過(guò)hash之后存儲(chǔ)就安全了。這顯然是不正確的。有很多方式可以快速的從hash恢復(fù)明文的密碼。還記得那些md5破解網(wǎng)站吧,只需要提交一個(gè)hash,不到一秒鐘就能知道結(jié)果。顯然,單純的對(duì)密碼進(jìn)行hash還是遠(yuǎn)遠(yuǎn)達(dá)不到我們的安全需求...
以上是下面鏈接文章里的片段
具體請(qǐng)查看這個(gè)鏈接里的文章:
滿意望采納~
咱倆的希望太相似了,都希望自己有一個(gè)網(wǎng)頁(yè)可以保存自己全部的密碼,而且絕對(duì)安全!這樣在任何電腦里都可以打開(kāi)查閱,即方便又安全。我已經(jīng)研究了很長(zhǎng)時(shí)間了。我是這樣保存的:用提示語(yǔ)的方式將所有的密碼分別保存在兩個(gè)QQ的記事本里。所謂提示語(yǔ)的方式就是指,在設(shè)置密碼時(shí),為了便于記憶,用一句話的聲母做密碼的一部分,這句話就是你的密碼的提示語(yǔ)。這樣做主要目的是防止QQ管理員和看你的記事本的朋友知道你的密碼。這樣就實(shí)現(xiàn)了“任何電腦里都可以打開(kāi)查閱,即方便又安全”。當(dāng)其中一個(gè)QQ被盜,馬上再申請(qǐng)一個(gè)QQ,并把密碼再存放在新的QQ記事本里。只要兩個(gè)QQ不同時(shí)被盜,你的密碼就永遠(yuǎn)不會(huì)丟失。順便再提醒一下:為了防止別人看你的記事本,你可以為記事本設(shè)置密碼,其實(shí)和QQ密碼一樣就行。用上述方法,只要記住QQ一個(gè)密碼就可以了。
服務(wù)器安全包括如下幾個(gè)方面:
1、物理安全:服務(wù)器的硬盤(pán),電源,主板,賴(lài)以維持服務(wù)器正常工作的硬件,都是需要進(jìn)行定期維護(hù)確保安全的,只有保證這些硬件的絕對(duì)安全才能保證我們的服務(wù)器能正常運(yùn)行。
2、軟件安全:軟件安全包括系統(tǒng)安全,服務(wù)安全,漏洞安全,密碼安全,網(wǎng)絡(luò)安全
①、系統(tǒng)安全:系統(tǒng)本身是有很多一般都是比較安全的只要我們打好足夠的補(bǔ)丁,但是系統(tǒng)文件我們創(chuàng)建好的網(wǎng)站目錄權(quán)限,系統(tǒng)盤(pán)的關(guān)鍵位置例如temp的位置的權(quán)限設(shè)置。
②、服務(wù)安全:注冊(cè)表和服務(wù)項(xiàng)一定要仔細(xì)進(jìn)行檢查嚴(yán)禁遠(yuǎn)程修改。
③、密碼安全:對(duì)于弱密碼要立即進(jìn)行修改,密碼強(qiáng)度要有數(shù)字加英文以及特殊符號(hào)進(jìn)行整改
④、網(wǎng)絡(luò)安全:防cc,抗doss是我們服務(wù)器安全很常見(jiàn)的問(wèn)題了。也是防止木馬病毒的入侵的必要的手段。
⑤、資源安全:進(jìn)行資源監(jiān)控保證資源不被篡改入侵是針對(duì)服務(wù)器一項(xiàng)很重要的安全措施能夠及時(shí)幫助我們找出被篡改的資源,以及進(jìn)行告警來(lái)幫助我們更好的管理服務(wù)器安全。