人人IT網

人人IT網

當前位置: 主頁 > IT新聞 > 互聯網 >

如何設計安全的用戶登錄功能

時間:2012-12-07 01:41來源:Internet 作者:Internet 點擊:
如何設計安全的用戶登錄功能 用戶登錄功能是Web應用系統具備的最基本的功能,關系到用戶數據和應用系統數據的安全,設計一個安全的用戶登錄功能,涉及到以下幾個方面的內容。 (一) 老生常談——口令 1
如何設計安全的用戶登錄功能


用戶登錄功能是Web應用系統具備的最基本的功能,關系到用戶數據和應用系統數據的安全,設計一個安全的用戶登錄功能,涉及到以下幾個方面的內容。
(一) 老生常談——口令
1. 口令長度與复雜度限制
限制用戶輸入一些非常容易被破解的口令,比如qwert、asdfg、123456、password之類的,参考twitter和facebook的設計,为這样的口令做一個黑名單,不允許使用黑名單中的口令。同時,還對用戶口令的長度、复雜度進行檢查,要求用戶設置足夠長度,且复雜度符合安全策略的口令。
在口令安全的這個方面,用戶體驗和安全可能是相對的。限制用戶輸入某些口令及口令的長度和复雜度,在用戶體驗方面可能並不太好。所以,很多成功且設計良好的社交網站(SNS)都提供了UX讓用戶知道他的口令強度是什麼样的,這样可以讓用戶有一個選擇,目的就是告訴用戶——要想安全,先把口令設得好一點。
2. 不要明文保存用戶的口令
用戶都會用相同的ID相同的口令來登錄很多網站。所以,如果Web應用系統明文保存口令的話,那麼,數據被不良員工流傳出去那對用戶將是災難性的。所以,用戶的口令一定要加密保存,最好是用不可逆的加密,但不要直接使用諸如MD5或是SHA1之類加密算法。
3. 不要讓瀏覽器保存口令
瀏覽器記住口令,對用戶來說是很方便的事,因为用戶不可能記住那麼多的口令,只能借助於某些工具幫助記憶,瀏覽器只是其中的一種。但對於用戶數據的安全來說,有很多方法可以獲取瀏覽器記住的口令。所以,不要讓瀏覽器保存用戶名和口令。
(二) 用戶登錄狀態
HTTP是無狀態的協議,是無法記錄用戶訪問狀態的。用戶的每次請求都是獨立的無關聯的,一筆是一筆。而我們的Web應用系統都是設計成多個頁面的,在頁面跳轉過程中我們需要知道用戶的狀態,尤其是用戶登錄的狀態,這样我們在頁面跳轉後我們才知道是否可以讓用戶有權限來操作一些功能或是查看一些數據。
我們每個頁面都需要對用戶的身份進行認證。當然,我們不可能讓用戶在每個頁面上輸入用戶名和口令。为了實現這一功能,Web應用系統會把用戶登錄的信息存放在客戶端的Cookie裏,每個頁面都從這個Cookie裏獲得用戶是否登錄的信息,從而達到記錄狀態,驗證用戶的目的。但是,Cookie的使用並不是簡單的事,下面是使用Cookie的一些原則。
1. 千萬不要在Cookie中存放用戶的密碼
千萬不要在Cookie中存放用戶的密碼,加密的密碼都不行。因为這個密碼可以被人獲取並嘗試離線窮舉。所以,一定不能把用戶的密碼保存在Cookie中。
2. 正確的設計“記住密碼”
這個功能簡直就是一個安全隱患,通常的設計是用戶戶勾選了這個功能,系統會生成一個Cookie。Cookie包括用戶名和一個固定的散列值,這個固定的散列值一直使用。這样,可以在所有的設備和客戶上都可以登錄,而且可以有多個用戶同時登錄。更安全一點的做法是:
1) 在Cookie中,保存三個東西——用戶名,登錄序列,登錄Token
 用戶名:明文存放。
 登錄序列:一個被MD5散列過的隨機數,僅當強制用戶輸入口令時更新(如:用戶修改了口令)。
 登錄Token:一個被MD5散列過的隨機數,僅一個登錄Session內有效,新的登錄Session會更新它。
2) 上述三個要素會存在服務器上,服務器需要驗證客戶端Cookie裏的這三個要素。
登錄Token是單實例登錄,意思就是一個用戶只能有一個登錄實例。登錄序列是用來做盜用行为檢測的。
如果用戶的Cookie被盜後,盜用者使用這個Cookie訪問網站時,我們的系統是以为是合法用戶,然後更新“登錄Token”。而真正的用戶回來訪問時,系統發現只有“用戶名”和“登錄序列”相同,但是“登錄Token” 不對,這样的話,系統就知道,這個用戶可能出現了被盜用的情況。於是,系統可以清除並更改登錄序列 和 登錄Token,這样就可以令所有的Cookie失效,並要求用戶輸入口令。並给警告用戶系統安全。
3. 不要讓Cookie有權限訪問所有的操作
参考新浪微博的XSS攻擊,即使Cookie有權限訪問登錄之後的所有操作。下面的這些功能一定要用戶輸入口令:
 修改口令。
 修改電子郵件。
 用戶的隱私信息。
 涉及金錢的用戶消費功能。
(三) 找回口令功能
找回口令的功能一定要提供,目前常用的找回口令功能大致有以下幾種:
1) 安全問答。
事實證明,這個環節很煩人,而且用戶並不能很好的設置安全問答。什麼,我的生日啊,我母親的生日,等等。因为今天的互聯網和以前不一样了,因为SNS,今天的互聯比以前更真實了,在facebook,開心,人人網,LinkedIn查到很多的真實的信息。
2) 重置用戶的密碼。
這有可能讓用戶的密碼遭到惡意攻擊
3) 安全一點的做法——通過郵件自行重置。
當用戶申請找回口令功能的時候,系統生成一個MD5唯一的隨機字串(可通過UID+IP+timestamp+隨機數),放在數據庫中,然後設置上時限(比如1小時內),给用戶發一個郵件,這個連接中包含那個MD5的字串的鏈接,用戶通過點擊那個鏈接來自己重新設置新的口令。
4) 更安全一點的做法——多重認證。
比如:通過手機+郵件的方式讓用戶輸入驗證碼,還可以使用數字證書、動態口令等方式。是否使用多重認證,主要取决於Web應用系統的重要性程度。
(四) 防禦暴力破解
1) 使用驗證碼。
驗證碼是後台隨機產生的一個短暫的驗證碼,這個驗證碼一般是一個計算機很難識別的圖片。這样就可以防止以程序的方式來嘗試用戶的口令。
事實證明,這是最簡單也最有效的方式。當然,總是讓用戶輸入那些肉眼都看不清的驗證碼的用戶體驗不好,所以,可以折中一下。比如Google,當發現一個IP地址發出大量的搜索後,其會要求你輸入驗證碼。
2) 用戶口令失敗次數
設置口令失敗的上限,如果失敗過多,則把帳號锁了,需要用戶以找回口令的方式來重新激活帳號。
但是,這個功能可能會被惡意人使用,造成用戶账戶不能使用(這是一種變相的拒絕服務攻擊)。更好的方法是,結合IP地址做驗證,同時增加嘗試破解的時間成本。如,兩次口令嘗試的間隔是5秒钟。三次以上錯誤,帳號被臨時锁上30秒,5次以上帳號被锁1分钟,10次以上錯誤帳號被锁4小時等等。如果發現來自同一IP地址的錯誤次數太多,正確的做法是禁止這個用戶在這個IP地址登錄,而不是單純的禁止用戶登錄。


From:ITEYE
頂一下
(0)
0%
踩一下
(0)
0%
------分隔線----------------------------
發表評論
請自覺遵守互聯網相關的政策法規,嚴禁發布色情、暴力、反動的言論。
評價:
表情:
驗證碼:點擊我更換圖片
欄目列表
推薦內容