2012-09-25 89 views
1

我已經寫了一個簡單的自定義會話處理程序(在MySQL中,但這不相關),它只是將序列化會話數據,會話標識和當前時間保存到表中。在自定義處理程序中保護PHP會話ID

雖然會話存在,但會話ID與攻擊者的密碼一樣有價值,這使我相信我應該以某種方式加密它。

將數據存儲到數據庫之前,爲了強制攻擊者強制使用會話ID僞造cookie,是否值得對其進行散列處理?

我的網站已經對所有連接使用HTTPS。

+0

在stackoverflow上會話ID是「加密」嗎?您需要防止來自多個客戶端的同一會話的惡意使用,而不是標識符本身。 – zerkms

+0

@zerkms,除非我能讀懂會話表,否則我不會知道。 – Martin

+0

因此您的網站上的用戶可以閱讀會話表? – zerkms

回答

0

所以你要防止的是,如果攻擊者從你的數據庫訪問會話ID的轉儲,他可以擺出任意用戶的身份,因爲他可以按原樣使用會話ID。對於這一點來說,以散列密碼的方式散列id實際上是個不錯的主意,所以單向查找是可能的,但散列值本身已變得毫無用處。由於會話id通常很快就會過期,因此在暴力破解中幾乎沒有用處。

另一方面,由於會話id通常非常快速過期,因此可能沒有多少指向。攻擊者的機會之窗非常小。攻擊者能夠從數據庫中獲得會話id的轉儲的重要性更加嚴重,並且是一種更糟糕的攻擊,因爲這意味着攻擊者可能已經可以訪問其他數據。

它仍然是一個值得保護的小缺點(輕微的計算開銷,稍微複雜的會話ID調試)。

+0

我同意,如果你在黑客有權訪問數據庫的地方閱讀會話ID無論如何你都搞砸了。另外你可以簡單地清除會話。在加密敏感數據和實施某種權限升級功能時,您的時間可能會更好。 – James

+0

我確實將會話設置爲快速過期,但PHP使用GC機制來清理它們。由於概率的原因,他們有可能活得比我想象的長得多。 – Martin

+0

@Martin您的處理程序可以/應該包含到期檢查。 – deceze