天天看點

Cookie 防篡改機制

一、為什麼Cookie需要防篡改

為什麼要做Cookie防篡改,一個重要原因是 Cookie中存儲有判斷目前登陸使用者會話資訊(Session)的會話票據-SessionID和一些使用者資訊。 當發起一個HTTP請求,HTTP請求頭會帶上Cookie,Cookie裡面就包含有SessionID。 後端服務根據SessionID,去擷取目前的會話資訊。如果會話資訊存在,則代表該請求的使用者已經登陸。 伺服器根據登陸使用者的權限,傳回請求的資料到浏覽器端。

因為Cookie是存儲在用戶端,使用者可以随意修改。是以,存在一定的安全隐患。

二、例子

使用者wall在浏覽器端輸入使用者名密碼,發起POST請求到後端伺服器。後端伺服器驗證合法,傳回Response,并Set-Cookie為sessionid=*;username=wall;。

浏覽器端在接收到HTTP響應後,發現Set-Cookie,将其存入本地記憶體或硬碟中。

浏覽器端再次發起請求,帶上Cookie資訊sessionid=*;username=wall;,請求修改自己的頭像資訊。

伺服器根據sessionid驗證目前使用者已登陸,根據username,查找資料庫中的對應資料,修改頭像資訊。

如果目前使用者知道username的作用,修改username=pony。再次發起請求,則伺服器接收到請求後,會去修改username為pony的資料。 這樣,就暴露出資料被惡意篡改的風險。

三、防篡改簽名

伺服器為每個Cookie項生成簽名。如果使用者篡改Cookie,則與簽名無法對應上。以此,來判斷資料是否被篡改。

原理如下:

服務端提供一個簽名生成算法secret

根據方法生成簽名secret(wall)=34Yult8i

将生成的簽名放入對應的Cookie項username=wall|34Yult8i。其中,内容和簽名用|隔開。

服務端根據接收到的内容和簽名,校驗内容是否被篡改。

舉個栗子:

繼續閱讀