2011年末,2012年初,IT界最熱鬧的事情就是各網站的用戶密碼洩露了。
最開始是一個程序員常上的網站,CSDN。到後來,什麽人人網、天涯、開心之類的密碼庫都不約而同地被爆了出來。元旦過後第一個工作日,新浪微薄也爆出了SQL注入漏洞,於是,新浪微博的密碼也暴露了(不過沒有大規模洩露給公衆,至於黑客圈内有沒有流傳開,目前就不是我等人能知道的了)。
是網站就有漏洞和Bug,這個不奇怪。但是問題是,爲什麽各大網站都會選擇明文保存密碼?
我在高中的時候架設了一個ASP班級論壇,用的是動網BBS2.x的源碼,那時候也是用的明文,我就覺得不安全。那時候我也不知道居然有不可逆的加密方式,更不知道什麽MD5、SHA,爲了不讓人一眼看出來直接的對應關係,我的加密方法是ASCII碼減去它在字符串裏面的位置。例如bcde,就會加密為aaaa(其實我忘記了是aaaa還是bbbb了)。這個比簡單的一一影射式的加密好那麽一點,但仍然是簡單的,而且,最重要的是,它是可逆的。後來和Donald、Wing他們聊天說起來,Wing分析了她自己的密碼的密文,又註冊了個新的賬戶,用了很短的時間,印象中不到10分鐘,就把我的加密算法搞出來了。
後來我發現我用的動網論壇早就有高級版本了,在這個高級版本裏面,我驚訝地發現了一個名字叫MD5的函數。我很快地就把我的密碼加密算法替換成MD5了。(我忘記我是直接升級了論壇還是只是替換了密碼加密方法,印象中好像沒有直接升級論壇,或者就算升級也是很後來的事情了,我在這個版本的動網論壇上做的二次開發還挺多的,包括做的一個不記名投票系統,後來用它選班委會的時候被它坑了一把:作爲全班最不擅長運動的人(沒有之一),我被選為了體育委員)
說了那麽多,我只是想說,數據庫裏面的密碼加密這是最簡單的事情,連高中的我也能想到,爲什麽還有那麽多大的網站,包括CSDN這種給程序員們做的網站,還會用明文密碼?在我們公司的RTX某個全是程序員的群裏面反復討論過這個問題,陰謀論一點就說是和政府相關,國寶公安們要大網站的密碼庫來掃描國外的網站例如Gmail。這個事件點貌似能配合得上Google退出中國的事情,不過我還是覺得應該不至於。但誰知道呢。到最後,我最能接受的解釋就是:程序員們偷懶。好吧,雖然我覺得密碼加密這種事情也就會多不到10行的代碼。
還有新浪微博爆出來的SQL注入漏洞,也讓我詫異不已。我最近知道的SQL注入漏洞有連個,一個是新浪微博(嚴格來説好像是愛問知識人?不過這兩個系統用的是同一套用戶名密碼系統),還有一個,是華東理工大學機械與動力工程學院的網站。新浪微博那個漏洞,發現者等到新浪把這個漏洞修復了之後才把它爆出來;而華東理工大學機械與動力工程學院這個就沒有那麽幸運了,於是我就親身實驗了一把……SQL注入漏洞在我高二的時候踫到過一次,那時候我們學校剛上綫了一個學籍管理系統,還沒有正式使用。我碰巧忘記在哪裏看到SQL注入漏洞的原理了,於是我就在上面試了一下……於是就拿到那個系統的管理員權限了……印象中,那個系統好像直到我高三畢業也沒有正式使用,不知道現在怎樣了,也不知道是不是和我那次入侵有關(後來我直接告訴老師了- -b)
此後我做字符串拼接的時候就非常小心了,尤其是字符串拼接的某一段是用戶提交的内容的時候……
好吧,下面提點小Tip,關於密碼分級的,為不同的網站設不同的密碼是最保險的,如果做不到,那至少要有6套不相同的密碼。
級別最高的,長度至少8位,大小寫數字特殊字符都要有。國内外的郵箱、和錢相關的例如網銀、支付寳等。這個至少要三套,國内郵箱一套,國外郵箱一套,和錢相關的一套。
級別低一點的,普通網站,常用的網站,新浪微博、Twitter、QQ之類的,長度至少8位,至少不能是純數字,不能和鍵盤佈局相關(例如1q2w3e4r),也不能是英文單詞。這個至少兩套,國内網站一套,國外網站一套。
級別最低的,註冊一次之後基本上不會回來的,那麽就隨便了。
如果在上面三級的基礎上為不同網站加上網站名的前綴、後綴之類的就更保險了。