2012-01-04 60 views
13

我讀過,玩框架通過散列會話id與應用程序密鑰解決會話註冊問題,但它提供了任何機制來防止會話劫持,或者這是遺留給實現者?是否玩!框架有沒有內建機制來防止會話劫持?

+0

到目前爲止,我有一個是和不是,所以這裏顯然有一些矛盾的信息。 – marchaos 2012-01-05 19:37:51

+0

我仍然覺得這個問題沒有答案,但不幸的是我必須在任何情況下獎賞賞金。如果有人可以回答一個明確的答案,那就太好了。 – marchaos 2012-01-23 11:32:05

回答

3

該劇的文檔有很好的關於安全性的章節,所以不是重複的,這裏是一個鏈接 - http://www.playframework.org/documentation/1.2.4/security

它涵蓋

  • XSS
  • SQL注入
  • 會話安全
  • 跨站請求僞造

一些你必須自己實現,別人不這樣做。

有關會話劫持的具體問題是自動的。

會話是密鑰/值的散列,已簽名但未加密。 意味着只要你的祕密是安全的,第三方就不可能僞造會話。

+0

感謝您的回答。我真的不知道如何散列關鍵值並將其與應用程序密鑰進行簽名,以防止有人竊取您的Cookie並使用它。也許我錯過了什麼? – marchaos 2012-01-04 19:22:33

+0

,因爲如果有人篡改它,他們不知道散列,所以散列值變爲無效,並且Play知道該會話已經失效。 – Codemwnci 2012-01-04 20:01:33

+2

如果他們不篡改它會怎麼樣。如果我嗅探你的cookie,並且不改變它中的任何值,那麼肯定是因爲哈希仍然有效(假設這存儲在cookie中),我可以使用你的值進行驗證。 – marchaos 2012-01-04 21:24:17

3

不,一旦能夠捕獲會話cookie(通過嗅探/中間人),就沒有內置的方法來防止劫持會話。 有一些方法來使它更難,如:使用

  • 僅HTTPS
  • 在application.conf

一個approache設置application.session.httpOnly使其更難的是: - 存儲IP /用戶代理/解決方案/其他的東西或散列,也在會話..在你的控制器,然後檢查訪問您的網站的用戶是否仍然重新創建相同的哈希......唯一真正的問題是與使用代理的人,例如因羣集而動態更改IP。

一個小技巧,你可以嘗試使用:(僅適用於最新的瀏覽器) 當用戶登錄時,存放一些東西,在一個HTML5本地存儲。修改您的Ajax調用以從本地存儲提供此信息。如果信息丟失/無效,則可以使整個會話失效。但是您必須確保檢查僅適用於來自HTML5瀏覽器的請求。

希望這會有所幫助。

+0

存儲IP和用戶代理是一個壞主意。見http://stackoverflow.com/questions/969330/including-user-ip-addr-for-hash-cookie-value-bad-idea – marchaos 2012-01-04 21:26:42

+0

你是鏈接地址我曾說過「唯一真正的問題是與那些正在使用代理的人,例如由於集羣而動態更改IP。「 沒有任何反對存儲用戶代理的散列,因爲如果在會話期間發生更改,會話被劫持。 這一切都取決於你願意投入多少能量,如果它真的值得。 更改/刪除敏感數據應始終只能通過SSL並提供密碼。 – 2012-01-05 15:08:34