Cookie 防篡改機制服務器
服務器能夠爲每一個Cookie項生成簽名,因爲用戶篡改Cookie後沒法生成對應的簽名, 服務器即可以得知用戶對Cookie進行了篡改。併發
1. 在服務器中配置一個鮮爲人知的字符串(咱們叫它Secret),好比:x$sfz32。code 2. 當服務器須要設置Cookie時(好比authed=false),不只設置authed的值爲false, 在值的後面進一步設置一個簽名,最終設置的Cookie是authed=false|6hTiBl7lVpd1P。blog 3. 簽名6hTiBl7lVpd1P是這樣生成的:Hash('x$sfz32'+'true')。 要設置的值與Secret相加再取哈希。ip 4. 用戶收到HTTP響應並發現頭字段Set-Cookie: authed=false|6hTiBl7lVpd1P。字符串 5. 用戶在發送HTTP請求時,篡改了authed值,設置頭字段Cookie: authed=true|???。 由於用戶不知道Secret,沒法生成簽名,只能隨便填一個。get 6. 服務器收到HTTP請求,發現Cookie: authed=true|???。服務器開始進行校驗: Hash('true'+'x$sfz32'),便會發現用戶提供的簽名不正確。table |