You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何篡改Flask Session Cookie后重新签名需使用原密钥?

为什么篡改Flask Session Cookie后重新签名必须使用原密钥?

Flask Session Cookie的核心机制

Flask采用客户端存储式Session:Session数据并非存放在服务器,而是经签名后存储在用户浏览器的Cookie中。这里要明确两个关键点:

  • 数据本身仅做了base64编码序列化,未加密,所以无需密钥就能解码出明文;
  • Cookie末尾的HMAC签名是服务器用专属密钥生成的,核心作用是验证数据是否被篡改。

解码无需密钥的原因

你使用工具解码的是Cookie的数据部分,这个过程只是还原base64编码的序列化内容,和密钥无关:

python flask_session_cookie_manager3.py decode -c ".eJwtjkGKAzEMBL-S9TkHy5Yte96wP1jCIEvyJmxIYDxzCvn7-pBTUw1N18ut_c7jasMtPy932me4cYjYGO7svp-_t8fpw_24f7nL-3Kem83G1S37dtikm7rFQUJBRSOL1GKWVCoRC3ED7VAz9FKsVi9aO2RgJmgSi88VuQCmXghjaRZjSCqBDTm3qE1LAh8bGnuG3jAHCV4iZlAoPkhiAGghT9v1GLZ9bCbK2Pq6P__sMQuev2ZcKQFkMinJWhRSqB4hYyWv2oWre_8D5vtQyA.ZTUbZQ.erv_yZmYg44tiaJ0u8fqKailHUc"

解码结果:

b'{"_flashes":[{ " t":["success","Login successful!"]}],"_fresh":true,"_id":"154c4d4e7e37b36c58977ac7ab1df1961f88e990cd9f161aa71bc380694a8145f87438be3325dc2ae4a6b3dbd85103b4ea0a1fb462c20c3461d1802c5a111b26","_user_id":"1","csrf_token":"acd9eea9751167ec85eb3c7d1904164970ddfca9"}'

重新签名必须用原密钥的原因

当你篡改Session数据后,必须重新生成HMAC签名,而服务器验证Cookie的逻辑是:

  1. 提取Cookie中的数据部分,用自身保存的原密钥重新计算HMAC;
  2. 将计算出的HMAC与Cookie携带的签名做比对;
  3. 只有两者完全匹配,服务器才会认定数据合法未被篡改,否则直接拒绝该Cookie。

简单来说,签名是服务器确认“数据由我生成、未被篡改”的凭证,不用原密钥生成的签名,服务器计算出的结果必然和你提供的签名不一致,自然不会认可你篡改后的Cookie。

内容的提问来源于stack exchange,提问作者b3nguang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 07:08:30