您的位置:首頁>科技>正文

從開發者角度:談談使用者密碼安全哪些事兒

使用者密碼幾乎在每個系統中都需要用到, 無論是前臺還是後臺。 最近, 美國司法部指控四名駭客涉嫌發動對雅虎的網路攻擊並竊取資訊, 主要是關於雅虎10億帳戶資訊被洩露事件的一個調查結果。 小編早年也曾經註冊過雅虎帳號, 可能也未能倖免。 系統的安全性其實是一個很複雜的話題, 要考慮的因素也非常多, 如作業系統配置、伺服器軟體設置、資料存儲的方式、資料加密傳輸、使用者許可權管理等等, 我們今天就只選擇最小的, 也是跟前端用戶關係最為密切的一個來探討:如何提高使用者密碼輸入的安全性?

永遠不要把密碼安全寄託在使用者身上

作為開發者, 我們可能經常認為, 使用者理論上都會有一定的安全意識, 不至於使用“123456”等如此弱爆的密碼。 但實際情況呢?Keeper Security對2016年發生的各種資料洩露中的1000萬個密碼進行了資料統計, 發現竟然有17%的用戶使用了“123456”作為密碼, 另外, 有高達30%的人使用了統計中的前10000個密碼。

先看一下使用者使用最多的25個密碼:

123456 123456789 qwerty 12345678 111111 1234567890 1234567 password 123123 987654321 qwertyuiop mynoob 123321 666666 18atcskd2w 7777777 1q2w3e4r 654321 555555 3rjs1la7qe google 1q2w3e4r5t 123qwe zxcvbnm 1q2w3e

有些用戶認為使用了“1q2w3e4r”或者“123qwe”等密碼(先看一下鍵盤上按鍵的位置)別人是很難猜到的, 但其實這一類密碼是最弱的, 通過字典破解, 最多只需幾秒鐘。 當然, 上面的統計結果是針對國外使用者的資料統計, 國內可能較多人會使用“8888888”、“123888”、“china123”之類。

當使用者資訊被盜用的時候, 我們經常會聽到某些網站運營者會跳出來說:“我們的網站是安全的, 帳號被盜用, 肯定是使用者沒有保護好密碼。 ”但當我們看到這份報告的時候, 你會發現, 這種指責其實很多時候是在逃避責任。

(1)這份報告的資料樣本是2016年, 2016年, 2016年, 重要的事情說三遍。

為什麼互聯網已經有了二十幾年, 但二十幾年後人們使用的密碼居然跟之前的沒有發生變化。 這說明什麼?我們一直忽視這方面的風險教育, 其中, 網站運營者責無旁貸。

(2)上述列舉的常見密碼中, 有很多都是只有6位元或者是純數位, 要知道通過暴力破解軟體或硬體來攻破這些密碼完全不費吹灰之力。 允許這一類密碼在系統中存在, 我們只能說, 網站運營者太過懶惰及不負責任。 其實, 只要網站運營者能夠在使用者設置密碼的時候進行一下密碼複雜度檢查, 就可以有效防止用戶使用這些太過簡單的密碼, 但實際上, 很多網站並沒有這樣做。

記住, 永遠不要把希望寄託在使用者身上, 不要用你的思維去認為別人也會這樣做。

不要收集跟應用無關的使用者資訊

使用者密碼被盜用最直接的後果就是資訊洩露, 而這些“資訊”, 其實就是我們在應用使用過程中所遺留的資訊。 例如, 我們在一些網站進行帳戶註冊的時候, 經常會被要求填寫各種各樣的資訊, 如性別、生日、愛好、籍貫、學習經歷、電子郵箱等等, 甚至, 有些奇葩的, 竟然要求填寫“性取向”, 暈死!真想拿把刀捅死他!我只想在論壇上發個帖子灌一下水, 你要知道這些資訊幹嘛?而大多數用戶居然就毫無防備地如實填寫了自己的個人資訊, 一旦資料洩露, 你的很多隱私就會暴露了。 這可能也跟我們從小所受到的教育有關, 因為老師一直教導我們要誠實做人, 而且我們現實生活中不知道填寫過多少份類似的表格,

一直以來我們都是如實填寫的, 這已經成為了習慣。 如果你還有這種想法, 應該趕快進行補救, 因為, 在互聯網世界, “老實人會吃虧!”

有些用戶可能會想:“你隨便拿去, 愛幹嘛幹嘛去, 反正你又不知道我是誰。 ”真的是這樣子嗎?不要忘記, 現在有一個很熱門的詞彙——大資料。 最簡單的解釋, 就是通過對大量資料進行關聯性分析來提取有用的資訊。 當資料足夠龐大的時候, 甚至可以得出一些讓你雞皮疙瘩的資訊:你的姓名、你的身份證、你有多少個孩子、你老婆是哪裡人、你在那裡上班, 甚至你有沒有做過對不起老婆的事……

而作為網站運營者, 我們有義務為使用者的資訊安全進行保密。 有些跟應用完全無關,或者雖然有關但洩密之後有可能對使用者產生較大危害的資料,我們就不要進行採集,即使你對自己的安全機制十分有信心。例如,你有個應用可能需要實名認證,你可能會要求用戶提供真實姓名、身份證圖片、自拍照片等,這確實是一個不錯的想法,但在你做這些之前,你應該反復問自己幾個問題:如果資料洩露了怎麼辦?是否可以有其他替代的方案?是否一定要進行實名?

我們在訪問一些國外網站的時候,一般都會在網站底部找到“Privacy Policy”之類的連結,用來展示網站對用戶隱私保護的相關政策。而國內大部分網站都不會有此類資訊,包括政府網站。網站運營者更多是站在自己的立場去考慮:“我為什麼要發這東西?萬一真的洩密了,豈不是成了用戶控告我的有力武器?”既然你對自己的安全體系那麼沒有信心,那就不要老是想著去收集使用者的資訊。

驗證碼跟使用者密碼安全性是兩回事

目前大多數網站在使用者登錄的時候都會要求輸入驗證碼,以通過驗證碼來防止有心人借助軟體手段來嘗試用不同的密碼進行登錄。於是乎,有些網站運營者就認為,即使使用者的密碼設置得不是很複雜,但如果不能通過軟體來攻擊而只能依靠人工去逐個嘗試,那用戶帳戶還是很安全的,因為你不可能通過人工去逐個嘗試,那不累死你!

這種想法其實是不妥的,首先,驗證碼不是不可以破譯的,就算是火車購票所使用的那種連人都分辨不出來的驗證碼,如果不是上級部門通過行政命令來干預,估計照樣很快能夠被破解,因為目前的人工智慧技術能夠做到的事情比你想像中的要多得多。大家可以去看一下廣受質疑的《最強大腦》當中小度的表現,就知道如今機器識別的能力大概去到什麼程度。

其次,驗證碼只能驗證驗證碼。這話說得有點拗口,就是說,驗證碼的複雜性跟密碼複雜性並沒有任何關聯。機器識別不了驗證碼是吧?!那我就通過人工識別。現在有一些人是專門做這生意的,他們不靠技術,就靠人海戰術,他們會通過一些小利益來組織一大幫人,然後每人就坐在電腦前對螢幕中顯示的驗證碼進行肉眼識別並錄入系統。有了這個結果,再結合密碼攻擊手段,那驗證碼還有用嗎?

你可能會說,不對啊,我後臺不是還會通過Session來確保一個驗證碼只能對應一次密碼輸入嗎?回顧一下之前我們提到有17%的用戶使用了123456來作為密碼,那麼,你認為這種爭論還有必要嗎?

用盡各種辦法來提高使用者密碼的安全性

1、對使用者輸入的密碼複雜度進行校驗

一般認為,一個安全的密碼至少是8位元以上,包含大小寫字母、數位、特殊符號。當使用者密碼不符合複雜度要求時,我們可以不允許下一步操作。做到了這一點,我們起碼可以避免用戶輸入諸如123456之類的密碼。

2、對一些規則明顯的密碼進行警示

例如:

(1)密碼跟用戶名一樣

(2)密碼跟電子郵件一樣

(3)密碼為用戶名+身份證某些數位,如billgate1980

(4)密碼跟網址或應用名相同,如sina.com、weixin

(5)存在連續多個相同字元的密碼,如aaaaa123#

3、對常用密碼及已洩露的密碼進行提醒

之前已經發生過很多起使用者密碼洩露事件,而很多用戶其實仍然在繼續使用這些密碼。之前CSDN洩露事件之後,當小編在網易註冊一個類似名字的郵箱時,當我使用跟CSDN相同的密碼時,記得當時系統是彈出了風險提示,並要求我重設密碼,這說明後臺對此進行了校驗。由於此類資料庫比較龐大,對於一些小型網站來說可能很難操作,但對於前10000個密碼進行審查,我們是完全可以做得到的,就怕你不想去做。

4、對敏感應用使用多重認證方法

我們可能會希望使用者將密碼設置得越複雜越好,因為這會越難破解,例如強制要求輸入30位元的複雜密碼才能註冊。但如果你這樣做,估計你的網站是白做了,因為這完全沒有考慮到用戶的體驗,誰會記得住那麼長的一串密碼?而且,再複雜的密碼也有可能洩露(例如為了記住該密碼,可能會把它記錄在網路記事本當中)。因此,當應用對安全性有較高的要求時,我們應該選用多重驗證的方式,例如通過手機驗證碼、通過手機APP掃碼等。密碼只是一種安全手段,不是唯一手段。

5、提示使用者定期修改密碼

雖然這種提示很多時候都是在做無用功,用戶一般都不會去修改自己的密碼,因為這意味著又要多記憶一個密碼。但是,作為網站運營者,你有義務這樣做,因為密碼攻擊手段在不斷升級、密碼字典在不斷更新,只要這100個用戶當中只要有一個人修改了,那麼你這條提示資訊就產生了價值。同時,對於常見密碼、新的密碼規則等資料要定期進行更新,並對存量使用者資料進行風險篩查,必要時強制使用者修改密碼,確保使用者資訊的安全。

6、允許用戶使用一些強度更高的字元作為密碼

這個其實是一個不太成熟的建議,因為目前幾乎所有網站都是使用鍵盤上的字元來作為密碼的。而實際上,我們還有很多鍵盤上沒有的字元,例如漢字,或者是Unicode中的Emoji(如✅️)。但由於流覽器的password輸入框本身就對此很不友好,因此,要實現這種輸入,估計只能依賴手機輸入法或者使用虛擬鍵盤之類,也可以使用普通的text結合一定mask手段來類比密碼框效果。如果使用者能夠使用這類字元作為密碼,那麼對提升密碼強度無疑是非常有利的,只是用戶未必會使用。

有些跟應用完全無關,或者雖然有關但洩密之後有可能對使用者產生較大危害的資料,我們就不要進行採集,即使你對自己的安全機制十分有信心。例如,你有個應用可能需要實名認證,你可能會要求用戶提供真實姓名、身份證圖片、自拍照片等,這確實是一個不錯的想法,但在你做這些之前,你應該反復問自己幾個問題:如果資料洩露了怎麼辦?是否可以有其他替代的方案?是否一定要進行實名?

我們在訪問一些國外網站的時候,一般都會在網站底部找到“Privacy Policy”之類的連結,用來展示網站對用戶隱私保護的相關政策。而國內大部分網站都不會有此類資訊,包括政府網站。網站運營者更多是站在自己的立場去考慮:“我為什麼要發這東西?萬一真的洩密了,豈不是成了用戶控告我的有力武器?”既然你對自己的安全體系那麼沒有信心,那就不要老是想著去收集使用者的資訊。

驗證碼跟使用者密碼安全性是兩回事

目前大多數網站在使用者登錄的時候都會要求輸入驗證碼,以通過驗證碼來防止有心人借助軟體手段來嘗試用不同的密碼進行登錄。於是乎,有些網站運營者就認為,即使使用者的密碼設置得不是很複雜,但如果不能通過軟體來攻擊而只能依靠人工去逐個嘗試,那用戶帳戶還是很安全的,因為你不可能通過人工去逐個嘗試,那不累死你!

這種想法其實是不妥的,首先,驗證碼不是不可以破譯的,就算是火車購票所使用的那種連人都分辨不出來的驗證碼,如果不是上級部門通過行政命令來干預,估計照樣很快能夠被破解,因為目前的人工智慧技術能夠做到的事情比你想像中的要多得多。大家可以去看一下廣受質疑的《最強大腦》當中小度的表現,就知道如今機器識別的能力大概去到什麼程度。

其次,驗證碼只能驗證驗證碼。這話說得有點拗口,就是說,驗證碼的複雜性跟密碼複雜性並沒有任何關聯。機器識別不了驗證碼是吧?!那我就通過人工識別。現在有一些人是專門做這生意的,他們不靠技術,就靠人海戰術,他們會通過一些小利益來組織一大幫人,然後每人就坐在電腦前對螢幕中顯示的驗證碼進行肉眼識別並錄入系統。有了這個結果,再結合密碼攻擊手段,那驗證碼還有用嗎?

你可能會說,不對啊,我後臺不是還會通過Session來確保一個驗證碼只能對應一次密碼輸入嗎?回顧一下之前我們提到有17%的用戶使用了123456來作為密碼,那麼,你認為這種爭論還有必要嗎?

用盡各種辦法來提高使用者密碼的安全性

1、對使用者輸入的密碼複雜度進行校驗

一般認為,一個安全的密碼至少是8位元以上,包含大小寫字母、數位、特殊符號。當使用者密碼不符合複雜度要求時,我們可以不允許下一步操作。做到了這一點,我們起碼可以避免用戶輸入諸如123456之類的密碼。

2、對一些規則明顯的密碼進行警示

例如:

(1)密碼跟用戶名一樣

(2)密碼跟電子郵件一樣

(3)密碼為用戶名+身份證某些數位,如billgate1980

(4)密碼跟網址或應用名相同,如sina.com、weixin

(5)存在連續多個相同字元的密碼,如aaaaa123#

3、對常用密碼及已洩露的密碼進行提醒

之前已經發生過很多起使用者密碼洩露事件,而很多用戶其實仍然在繼續使用這些密碼。之前CSDN洩露事件之後,當小編在網易註冊一個類似名字的郵箱時,當我使用跟CSDN相同的密碼時,記得當時系統是彈出了風險提示,並要求我重設密碼,這說明後臺對此進行了校驗。由於此類資料庫比較龐大,對於一些小型網站來說可能很難操作,但對於前10000個密碼進行審查,我們是完全可以做得到的,就怕你不想去做。

4、對敏感應用使用多重認證方法

我們可能會希望使用者將密碼設置得越複雜越好,因為這會越難破解,例如強制要求輸入30位元的複雜密碼才能註冊。但如果你這樣做,估計你的網站是白做了,因為這完全沒有考慮到用戶的體驗,誰會記得住那麼長的一串密碼?而且,再複雜的密碼也有可能洩露(例如為了記住該密碼,可能會把它記錄在網路記事本當中)。因此,當應用對安全性有較高的要求時,我們應該選用多重驗證的方式,例如通過手機驗證碼、通過手機APP掃碼等。密碼只是一種安全手段,不是唯一手段。

5、提示使用者定期修改密碼

雖然這種提示很多時候都是在做無用功,用戶一般都不會去修改自己的密碼,因為這意味著又要多記憶一個密碼。但是,作為網站運營者,你有義務這樣做,因為密碼攻擊手段在不斷升級、密碼字典在不斷更新,只要這100個用戶當中只要有一個人修改了,那麼你這條提示資訊就產生了價值。同時,對於常見密碼、新的密碼規則等資料要定期進行更新,並對存量使用者資料進行風險篩查,必要時強制使用者修改密碼,確保使用者資訊的安全。

6、允許用戶使用一些強度更高的字元作為密碼

這個其實是一個不太成熟的建議,因為目前幾乎所有網站都是使用鍵盤上的字元來作為密碼的。而實際上,我們還有很多鍵盤上沒有的字元,例如漢字,或者是Unicode中的Emoji(如✅️)。但由於流覽器的password輸入框本身就對此很不友好,因此,要實現這種輸入,估計只能依賴手機輸入法或者使用虛擬鍵盤之類,也可以使用普通的text結合一定mask手段來類比密碼框效果。如果使用者能夠使用這類字元作為密碼,那麼對提升密碼強度無疑是非常有利的,只是用戶未必會使用。

Next Article
喜欢就按个赞吧!!!
点击关闭提示