2009-04-09 224 views
3

我正在開發一個公共站點,它將使用鍵入會話ID的數據庫支持的用戶會話。我試圖阻止會話劫持和篡改;我返回給客戶的會話數據本身價值有限,但我想防止批發盜竊。我在這裏制定了一個小計劃,但我想獲得一些反饋和批評。會話安全

  • 當會話開始時,會爲客戶端提供唯一密鑰和會話數據的散列。
  • 對於每個後續請求,客戶端都會發送會話密鑰+會話數據的散列。
  • 如果會話數據被修改,則會向客戶端提供反映其會話數據的新哈希值。
  • 如果請求中存在與數據庫不匹配的不正確散列,會話將被標記爲已泄露。該會話的請求和所有後續請求都會導致通過複製受損會話創建新會話。爲了安全審計目的,新會話引用它們從中複製的會話。

我想我可以看到受到攻擊的請求掃描大規模的攻擊。

非常感謝提前。

回答

2

這似乎是相對安全的,但也有幾個方面,這可以規避:

  • 如果會話密鑰被竊取,哈希可以過被盜。只要合法​​的客戶端不做任何事情,劫持者就可以接管並保持密鑰/散列/數據的一致性。除非合法客戶醒來,否則您不會看到任何東西。在任何情況下,如果你的散列沒有足夠的隱蔽性/安全性,它可以簡單地從數據中猜出來(它也可能被嗅探到)。您應該使用某種隨機鹽(每個會話,每個用戶,每個時間段......)以確保這是難以猜測的。

+0

就像旁白一樣,沒有安全措施甚至是完全緊張......你只需要按比例的努力來保護你的系統到如果違反,則需支付費用。過多的安全性可能會像代價一樣太小...... – Varkhan 2009-04-09 18:48:56

0

聽起來不錯。

您可能想要將身份驗證算法引入的一件事是用戶來自的IP地址。

對於當前的用戶身份驗證來說,它可能不是那麼好,但是如果會話遭到破壞,不同的IP將成爲一個巨大的標誌,但您可以使用該信息添加到阻止潛在惡意用戶的IP表規則。

另一個想法是跟蹤引薦網址。關於惡意行爲,如果有人來自任何一致性,可能會在程序中留下漏洞(如果有的話)。

2

我不明白會話數據散列點是什麼。它解決了什麼問題?

它可能會導致問題,例如,當同時在兩個選項卡中加載兩個頁面時。如果第一個請求更改會話數據,但另一個已經發送,則它將具有不正確的散列。

另外,如果你複製舊會話,我不知道你用這個做了什麼?

只是有一個簡單的會話ID和:

  • 改變它的登錄,避免會話固定和
  • 其鎖定到一個IP,以避免攻擊者通過假設控制sidejacking。

要防止攻擊者看到數據,您必須使用SSL。

+0

散列背後的想法是檢測由客戶以外的人篡改會話。通過複製(分支)會話,即使會話被劫持,我也允許客戶端繼續。 (或者我認爲,直到我閱讀Varkhan的評論。) – Paul 2009-04-09 19:01:44

0

你不能指望IP地址是唯一的或沒有改變。企業防火牆經常通過NAT轉換合併甚至隨機更改IP地址。它可以使系統更安全,但是它會對服務器的認證方案造成嚴重破壞,這些方案試圖要求相同的IP地址。

在過去的幾年裏,還有另外一個問題 - 系統的移動性比過去多得多。我經常'休眠'我的筆記本電腦,而不是關閉他們,但這意味着我來自不同的IP地址在家中,工作,星巴克等。這可以跳過服務器會話超時短至15-30分鐘 - 它只需要我的時間來從我的辦公室到午餐等。