炎炎設(shè)計
2023-07-06 11:03:56
我正在閱讀快速會話自述文件,其中講述了這個秘密:這是用于簽署會話 ID cookie 的秘密。[...]使用無法猜測的秘密將降低劫持會話的能力,僅猜測會話 ID(由 genid 選項確定)。https://github.com/expressjs/session#secrettbh:我不太明白。我認為秘密的目的是與會話 ID 一起用作某種哈希函數(shù)的參數(shù),以生成簽名(如hash(secret, sessionID) => signature),并將該簽名附加到 cookie 中的會話 ID 值上。因此,如果有人猜到了正確的會話 ID,它仍然無法工作,因為簽名不匹配?這個秘密實際上是用來做什么的?
1 回答

幕布斯6054654
TA貢獻1876條經(jīng)驗 獲得超7個贊
當出現(xiàn)這樣的問題時,通常最好只是查看源代碼并了解如何使用秘密。這是使用開源代碼的優(yōu)點之一。
這允許會話代碼檢測 cookie 值是否已被篡改,或者它是否仍然是服務(wù)器上最初設(shè)置的真實值,并且使它們更難在暴力會話攻擊中“猜測”。
這是防止黑客編造自己的 cookie 值或修改 cookie 值的一種方法,因為只有使用適當密鑰簽名的值才會被測試為有效。
簽名過程還有一個附帶的好處,即它使值變得更長并且看起來有些隨機,因此它掩蓋了潛在的值,使其更難以猜測。經(jīng)典的例子是,如果底層會話 ID 只是一個單調(diào)遞增的數(shù)字,那么很容易猜測未來或之前的會話值。但是,一旦被簽名,它就不再看起來像一個簡單的單調(diào)遞增數(shù)字,并且不容易猜測過去或未來的簽名會話值。盡管express-session使用24字節(jié)uid作為其會話id,但在對其進行簽名時,該值會延伸到非常非常長,這使得猜測和找到有效會話變得更加困難(我查看的簽名cookie值是80字節(jié)長(經(jīng)過一些編碼)。
添加回答
舉報
0/150
提交
取消