身份認(rèn)證設(shè)計(jì)的基本準(zhǔn)則
密碼長(zhǎng)度和復(fù)雜性策略
密碼認(rèn)證作為當(dāng)前最流行的身份驗(yàn)證方式,在安全方面最值得考慮的因素就是密碼的長(zhǎng)度。一個(gè)強(qiáng)度高的密碼使得人工猜測(cè)或者暴力破解密碼的難度增加。下面定義了高強(qiáng)度密碼的一些特性。
(1)密碼長(zhǎng)度
對(duì)于重要的應(yīng)用,密碼長(zhǎng)度最少為6;對(duì)于關(guān)鍵的應(yīng)用,密碼長(zhǎng)度最少為8;對(duì)于那些最關(guān)鍵的應(yīng)用,應(yīng)該考慮多因子認(rèn)證系統(tǒng)。
(2)密碼的復(fù)雜度
有的時(shí)候僅有長(zhǎng)度約束是不夠的,比如說(shuō)12345678、11111111這樣的密碼,長(zhǎng)度的確是8位,但極容易被猜測(cè)和字典***,所以這時(shí)候就需要增加密碼復(fù)雜度。下面列舉了一些提供復(fù)雜度的策略。
至少一個(gè)大寫字母(A~Z)。
至少一個(gè)小寫字母(a~z)。
至少一個(gè)數(shù)字(0~9)。
至少一個(gè)特殊字符(!@#$%^&等)。
定義最少密碼長(zhǎng)度(如8個(gè)字符)。
定義最長(zhǎng)密碼長(zhǎng)度(如16個(gè)字符)。
不能出現(xiàn)連續(xù)的字符(如123、abc、def)。
不能出現(xiàn)連續(xù)相同的字符(如1111)。
一旦我們定義好了這些策略,在用戶注冊(cè)時(shí)就可以強(qiáng)制用戶輸入高強(qiáng)度的密碼,從而提高密碼的安全性。
實(shí)現(xiàn)一個(gè)安全的密碼恢復(fù)策略
上一節(jié)介紹了密碼的長(zhǎng)度和復(fù)雜度,有時(shí),太復(fù)雜的密碼自己都給忘記了,該怎么辦?所以一般來(lái)說(shuō),一個(gè)應(yīng)用會(huì)提供密碼恢復(fù)功能。鑒于大部分應(yīng)用都提供了電子郵箱這具有唯一性字段的恢復(fù)方式,所以可見最常見的方式就是讓用戶輸入電子郵箱,輸入電子郵箱后,一般會(huì)有以下兩種解決方法。
(1)把原來(lái)的密碼發(fā)送到用戶信箱中去。
我個(gè)人的意見是,如果這樣做,說(shuō)明這個(gè)應(yīng)用可以得知你的密碼明文,這與系統(tǒng)只存hash/加密值的單項(xiàng)策略相違背,若哪一天這個(gè)程序的數(shù)據(jù)庫(kù)被攻克,所有的明文就會(huì)被很容易地得知,所以這種方式還是不值得提倡。
(2)重設(shè)一個(gè)臨時(shí)密碼,用戶用這個(gè)密碼登錄然后修改密碼。
這是一個(gè)相對(duì)較好的方法,通常為了增加安全性,我們還可以給這個(gè)臨時(shí)密碼一個(gè)有效期,如用戶必須24小時(shí)內(nèi)使用這個(gè)密碼登錄等。
上面的密碼恢復(fù)策略是基于一個(gè)事實(shí)的,就是你的電子郵箱應(yīng)該足夠安全(沒有人知道你的郵箱密碼)。但是如果這個(gè)應(yīng)用具有CSRF漏洞,即電子郵件可能被修改成一個(gè)***者的郵箱而受害者卻毫無(wú)所知,這時(shí)候如果進(jìn)行密碼恢復(fù)就會(huì)把密碼發(fā)到***者的信箱里,那么該怎么辦呢?
答案是更新重要字段時(shí)需要重新認(rèn)證。比如用戶的密碼、電子郵件等,如果用戶需要更新,則彈出一個(gè)對(duì)話框讓用戶輸入原先的密碼,這樣就可以有效地防止CSRF***。
重要的操作應(yīng)通過(guò)HTTPS傳輸
對(duì)于重要的操作,如登錄、修改密碼等,一定要通過(guò)HTTPS進(jìn)行傳輸。我們就以Tomcat為例,說(shuō)明一下如何進(jìn)行配置,使得指定的URL必須走HTTPS。
首先是產(chǎn)生一個(gè)證書。為了說(shuō)明方便,我們采用Java提供的keytool產(chǎn)生一個(gè)自認(rèn)證證書,命令如下:%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA。然后回答一些問(wèn)題,這里注意設(shè)置證書庫(kù)的密碼和key的密碼,我們這里設(shè)置為changeit,這樣就會(huì)產(chǎn)生一個(gè)證書庫(kù),如圖10-22所示。
圖10-22 用Java生成一個(gè)證書庫(kù)
然后在把產(chǎn)生的.keystore復(fù)制到{TOMCAT_HOME}\conf目錄下,配置server.xml如下:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
port="8443" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="${user.home}/.keystore" keystorePass="changeit" />
最后我們?cè)倥渲肁PP應(yīng)用下的WEB-INF\web.xml如下:
<security-constraint>
<web-resource-collection>
<web-resource-name>must https</web-resource-name>
<url-pattern>/login.jsp</url-pattern>➊
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
➊ 設(shè)置哪些URL 需要走HTTPS。
認(rèn)證錯(cuò)誤信息以及賬戶鎖定
下面是一些不正確的認(rèn)證錯(cuò)誤信息:
登錄失敗,用戶Kevin的密碼錯(cuò)誤。
登錄失敗,無(wú)效的用戶名。
登錄失敗,該用戶已被禁用。
登錄失敗,該用戶沒有被激活。
正確的表達(dá)方式應(yīng)該是唯一的一種:
登錄失敗,用戶名或密碼錯(cuò)誤。
不正確的認(rèn)證錯(cuò)誤信息可能會(huì)導(dǎo)致字典***或者暴力破解,所以我們要盡可能地給出一個(gè)很普遍的錯(cuò)誤信息。
此外為了防止暴力***,我們可以設(shè)定下列規(guī)則:
第一次登錄失敗,下一次登錄至少間隔5s。
第二次登錄失敗,下一次登錄至少間隔15s。
第三次登錄失敗,下一次登錄至少間隔45s。
第四次登錄失敗,集成圖形驗(yàn)證碼CAPTCHA,讓用戶輸入圖片中的字符串。
如果有足夠明顯的證據(jù)顯示是暴力破解(如每分鐘進(jìn)行了100次嘗試),IP地址或者Session ID應(yīng)該在接下來(lái)一段時(shí)間(如15分鐘)被阻止,在這種情況下,我們應(yīng)該給出清楚明白的錯(cuò)誤信息,說(shuō)明為什么這個(gè)登錄會(huì)失敗。
本文節(jié)選自《Web應(yīng)用安全威脅與防治——基于OWASP Top 10與ESAPI》
西寧網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,西寧網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為西寧上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營(yíng)銷網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的西寧做網(wǎng)站的公司定做!
王文君 李建蒙 編著
電子工業(yè)出版社出版
新聞標(biāo)題:身份認(rèn)證設(shè)計(jì)的基本準(zhǔn)則
網(wǎng)頁(yè)路徑:http://www.rwnh.cn/article42/jeechc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、手機(jī)網(wǎng)站建設(shè)、ChatGPT、網(wǎng)站排名、小程序開發(fā)、自適應(yīng)網(wǎng)站
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源:
創(chuàng)新互聯(lián)