Archived
为什么:core/session.py 原本手写 HMAC + 自定义 base64 签名,等于自己复刻 itsdangerous 的核心功能——密码学原语自己实现是风险点,且难与上游的安全 修复同步。 关键约束(换库的坑):两者字节级格式并不一致——手写实现用标准 base64 且 保留 '=' 填充,itsdangerous 用 urlsafe 且去填充。若不钉住旧格式,部署瞬间 线上全部登录态会失效。 改法: - 用 URLSafeTimedSerializer,按 secret 做 lru_cache(maxsize=8),避免每请求 重建序列化器 - loads() 增加 max_age 参数(默认 None,保持既有「不叠加服务端过期」行为) - get_uid() 顺带加固:cookie 里塞非整数不再抛 ValueError 变 500,改为返回 None - 删除 _derive_key / _int_to_bytes 及手写 HMAC/b64 验证:新增 2 例回归测试,其中 legacy cookie 样本由替换前的旧实现在固定时间戳 1700000000 下采集,钉住的是格式而非实现;另一例验证 max_age=None 接受旧 时间戳、max_age=60 拒绝。