2015-09-13 175 views
0

我有一個使用http託管的現有Web應用程序。
對於某些部分,我強制用戶使用Google(OAuth)登錄並收穫他們的電子郵件ID。
我然後設置cookie 6個月,並設置其內容作爲它由兩個變量的編碼字符串 - X &Ž基於oauth的身份驗證查詢

String x = new BigInteger(130, random).toString(32); 
String z = new BigInteger(130, random).toString(32); 
String cookieValue = URLEncoder.encode("z="+z+"&x="+x, "UTF-8"); 
Cookie cookie = new Cookie("someDomain",cookieValue); 
cookie.setHttpOnly(true); 
cookie.setPath("/"); 
cookie.setMaxAge(6 Months);` 

這些相同的值「x」和「z」的隨後被存儲在使用者的記錄在數據庫中以及用戶的每次訪問 - 這些值在cookie中和數據庫中都會更改。

您是否發現此方法中存在任何安全問題?

+0

首先使用https。 –

回答

0

連接的兩個隨機值不會給你比單個隨機值更多的熵/隨機性y其中length(y) = length(x) + length(z)

像這樣的系統只能用於安全的HTTP,但即使如此:使用長達6個月的cookie也不是一個真正安全的方法。最好定期檢查關聯用戶的帳戶在Google上是否仍然存在,例如通過使用Google的刷新令牌。

利用Google+ Signin的典型Web應用程序只需依靠Google來維護SSO會話狀態,而不會覆蓋其應用程序的狀態。因此,應用程序將使用僅在瀏覽器會話期間有效的會話cookie,並使用戶再次通過Google Signin查找新會話,並將其留給Google以確定SSO會話是否仍然存在。

將SSO會話外包給Google可以避免在應用程序中存儲長時間的會話cookie,並以增加顯式登錄數量爲代價來提高整體安全性(無論如何對於連接到Google+的其他應用程序簽到)。