*適合有一定網(wǎng)絡(luò)(WEB)安全知識(shí)的同行閱讀
實(shí)現(xiàn)手法(一)
1. 認(rèn)證
1.1 限制訪問
1.1.1 目的
針對(duì)特定的用戶才能訪問的資源,以及管理員角色才能進(jìn)行的操作等,需要對(duì)權(quán)限有差別化地控制。
1.1.2 步驟
(1)明確基本方針(policy)
哪些資源[*1],哪些人[*2],可以進(jìn)行怎樣的操作。
*1 圖片、文字、文件等;*2 匿名用戶、注冊(cè)用戶、VIP用戶、管理員等
(2)授權(quán)認(rèn)證
基于既定的方針,會(huì)有不特定多數(shù)的人訪問的站點(diǎn)(比如網(wǎng)購(gòu)),是哪些人他們?cè)陧撁嫔献隽四男┎僮鳎\(yùn)營(yíng)方可能需要掌握。
這時(shí)就需要實(shí)現(xiàn)認(rèn)證的功能,比如常見的會(huì)員登錄,登錄后點(diǎn)擊購(gòu)買按鈕等,而一旦被他人冒用,就會(huì)造成金錢等利益上的損失。
畢竟,網(wǎng)絡(luò)上,大家都看不見對(duì)方,風(fēng)險(xiǎn)很高,只能通過站點(diǎn)(尤其是數(shù)據(jù)庫(kù)和日志)收集到的各種信息來識(shí)別個(gè)人。
(3)方針的執(zhí)行
確認(rèn)了本次的訪問者誰,并且判定了本次其想要進(jìn)行操作的有效性[*1]之后,才允許其進(jìn)行本次的操作。
*1就算確認(rèn)了訪問者是注冊(cè)用戶,但其想訪問VIP用戶的資源或進(jìn)行相關(guān)操作,也是不被允許的
1.2 認(rèn)證的種類:認(rèn)證,是指核實(shí)訪問者身份 時(shí)的處理
1.2.1 知識(shí)性(也包括防止注冊(cè)機(jī)器人)
目前普遍使用的密碼認(rèn)證。
這種只有本人才知道的信息[*1],雖然很單純,但對(duì)于確認(rèn)訪問者本人是非常有效的方式。
而且,在被攻擊(篡改密碼等)之后,可以通過找回密碼或?qū)柮孛軉栴}等功能[*2] ,比較容易地幫助用戶恢復(fù)其認(rèn)證信息。
*1需要加密,即便是技術(shù)人員也不能輕易地解密,最大程度保護(hù)用戶隱私;
*2在設(shè)計(jì)及開發(fā)時(shí),就需要做到未雨綢繆,引入這些機(jī)制
1.2.2 所有物
電子信息。
經(jīng)過權(quán)威以及信用機(jī)構(gòu)發(fā)行的電子類授權(quán)物。可以是在瀏覽器上事先安裝的插件等(虛擬式),也可以是USB插入電腦等(物理式)。
而且,就算是丟失了,也可以申請(qǐng)重新發(fā)行,同時(shí)讓原有物失效。
1.3 密碼認(rèn)證的設(shè)計(jì): 密碼強(qiáng)度
字典式攻擊是最普遍的一種攻擊方式。
密碼的位數(shù)過少,包含自己的姓名(字母)、生日、電話號(hào)碼等相對(duì)容易被猜出來的拼音數(shù)字,成功破解的可能性比較大。
當(dāng)用戶在注冊(cè)或更改自己的信息時(shí),提示其不合規(guī)范,強(qiáng)制性讓其重新輸入,在設(shè)計(jì)和開發(fā)時(shí)需要引入這種機(jī)制, 但不能過于復(fù)雜[*1]。
只要輸入的內(nèi)容不是過于簡(jiǎn)單的,就盡量不要硬性規(guī)定不能輸入哪些字符[*1],不過可以根據(jù)運(yùn)維需要,規(guī)定必須輸入的最小長(zhǎng)度及哪些字符。
*1不然會(huì)引起用戶的不滿
1.4 封鎖賬戶:對(duì)于已注冊(cè)用戶,登錄時(shí)的認(rèn)證
1.4.1 鎖定:字典式攻擊的有效手段之一
(1)連續(xù)輸入多次密碼,均與實(shí)際密碼不符合時(shí),賬戶即被封鎖。
(2)如果一段時(shí)期內(nèi)鎖定后自動(dòng)解鎖的現(xiàn)象2次以上反復(fù)發(fā)生,并且系統(tǒng)判定是均來自同一IP時(shí),需要封鎖IP。
1.4.2 解鎖
(1)一定時(shí)間后,自動(dòng)解鎖
(2)強(qiáng)制性要求重新設(shè)置密碼
(3)由運(yùn)營(yíng)方手動(dòng)解鎖[*1]
*1 安全性要求較嚴(yán)格的情況(銀行、軍事等),需要本人提交書面申請(qǐng)
1.5 保護(hù)密碼
1.5.1 加密
一旦保存密碼(以及用戶名等登錄所需信息)的媒介物被外泄,涉及到的用戶信息可以輕易地被窺視,后果極其嚴(yán)重。
不過如果事前引入了加密機(jī)制,雖然不能做到100%保障密碼不被破解,也至少可以極大程度地增加破解的成本,爭(zhēng)取時(shí)間盡早發(fā)現(xiàn)亡羊補(bǔ)牢。
1.5.2 加密的技巧
對(duì)于專業(yè)黑客來說,字典式攻擊是慣用手段。所以如果只對(duì)密碼本身加密[*1],通過字典式攻擊被破解的成本也會(huì)相對(duì)降低。
所以,用戶名+密碼,把這個(gè)組合作為整體來加密,甚至還可以加入電話號(hào)碼或生日等做為組合體,盡可能地增加復(fù)雜度。
*1 哈希算法(Hash)是主流
1.5.3 重置密碼
通過哈希算法加密后,密碼內(nèi)容不可逆向恢復(fù)!
所以,在設(shè)計(jì)階段就要考慮讓用戶重置新密碼,而非單純地把原有密碼提示給用戶,也沒有必要。
1.6 給用戶顯示錯(cuò)誤信息的技巧
用戶名或密碼輸入錯(cuò)誤后無法通過認(rèn)證,這時(shí)需要給用戶提示相關(guān)內(nèi)容。
不管是用戶名錯(cuò)誤還是密碼錯(cuò)誤,或者是兩者都輸入錯(cuò)誤而導(dǎo)致無法通過認(rèn)證,原則上只需要向用戶顯示固定統(tǒng)一的信息,而非”錯(cuò)哪指哪“。
不然,如果顯示”用戶名不正確“,”密碼不正確“等信息,會(huì)給攻擊者暴露出另一層信息:
A. “用戶名不正確,那意味著密碼應(yīng)該正確”,會(huì)變相鼓勵(lì)攻擊者繼續(xù)對(duì)用戶名進(jìn)行排查
B. “密碼不正確,那意味著用戶名應(yīng)該正確”,會(huì)變相鼓勵(lì)攻擊者繼續(xù)對(duì)密碼進(jìn)行排查
1.7 認(rèn)證時(shí)記錄日志的技巧
不能把密碼寫入到日志文件中保存,一旦涉及到注冊(cè)及登錄信息的日志文件被外泄,加密也無濟(jì)于事。
A. 用戶正常地登錄,是直接的暴露了密碼信息
B. 用戶可能一時(shí)手誤輸錯(cuò)了大小寫或字?jǐn)?shù)錯(cuò)了,或者是忘記了密碼而試著使用登錄其它系統(tǒng)所用的密碼(*1)
*1 這時(shí)雖然無法登錄本系統(tǒng),但可能間接對(duì)其它系統(tǒng)的個(gè)人信息產(chǎn)生威脅
1.8 郵件認(rèn)證
1.8.1 新注冊(cè)用戶
注冊(cè)提交時(shí),給輸入的郵箱發(fā)一封郵件,起到臨時(shí)確認(rèn)郵箱是否有效[*1],如果自己收不到,則證明輸入有問題或郵件服務(wù)本身出了問題。
*1 用戶手誤輸入某些字符,郵件服務(wù)已經(jīng)停止,以及機(jī)器人注冊(cè)使用的郵箱等無法正常收到郵件
1.8.2 已注冊(cè)用戶
修改提交時(shí),與新注冊(cè)時(shí)類似,先給輸入的新郵箱發(fā)一封郵件,起到臨時(shí)確認(rèn)郵箱是否有效。
1.8.3 郵箱有效性的確認(rèn)
不管新注冊(cè)還是已注冊(cè)后的修改,需要在臨時(shí)確認(rèn)用的郵件里付上激活鏈接,有效地阻止攻擊者篡改郵箱。
A. 新注冊(cè)時(shí),點(diǎn)擊此鏈接即完成正式確認(rèn),后續(xù)的系統(tǒng)功能即可使用
B. 修改時(shí),也需點(diǎn)擊此鏈接即完成正式確認(rèn),同時(shí)給舊郵箱發(fā)一封郵件,說明此次修改了郵箱,今后舊郵箱失效,請(qǐng)新郵箱
1.9 手機(jī)號(hào)認(rèn)證
與郵箱認(rèn)證有相似之處。
(1)給用戶輸入的手機(jī)號(hào)發(fā)一條短信,成為臨時(shí)確認(rèn)用。其中寫有認(rèn)證碼[*1],如果自己收不到,則證明號(hào)碼輸入有問題[*2]。
(2)提交后,系統(tǒng)會(huì)提示輸入收到的認(rèn)證碼,在規(guī)定的時(shí)間內(nèi)輸入認(rèn)證碼后再次提交即證明該手機(jī)號(hào)是用戶本人在使用,完成認(rèn)證。
*1 此時(shí)在系統(tǒng)后臺(tái)保留著這個(gè)認(rèn)證碼;*2 也不排除手機(jī)在圈外等極少情況