larz-scripter/larzsession

GitHub: larz-scripter/larzsession

一个纯 Python 零依赖的签名 cookie 会话库,提供基于 HMAC 的防篡改 session 与 CSRF token 功能,无需服务端存储。

Stars: 0 | Forks: 0

# larzsession **签名的 cookie session + CSRF token。纯 Python 实现,零依赖。** 将 session 数据存储在客户端无法伪造的防篡改 cookie 中 —— 它经过 序列化、加盖时间戳,并使用 **HMAC 签名**,因此任何更改都会使其失效,并且你 可以根据时效使其过期。无需数据库,无需 session 存储:签名即 安全。此外,还生成/验证 CSRF token 并格式化强化过的 `Set-Cookie` header。 ``` from larzsession import Serializer s = Serializer("my-secret-key") token = s.dumps({"user_id": 42, "role": "admin"}) # -> cookie value s.loads(token, max_age=3600) # {'user_id': 42, ...}, or raises ``` ## 为什么选择它 - **无服务端存储。** 签名的 cookie *就是* session —— 这种无状态的认证 可以轻松进行水平扩展,且无需共享任何状态。 - **防篡改 + 可过期。** 使用派生密钥的 HMAC-SHA256;通过时间戳让你 可以强制执行 `max_age`。篡改会引发 `BadSignature`;过期的 token 会引发 `SignatureExpired`。 - **内置 CSRF。** `CSRF(secret).generate()` / `.validate(token)` 用于生成签名的、 会过期的 CSRF token。 - **强化的 cookie。** `cookie()` 默认会输出 `HttpOnly; Secure; SameSite=Lax`。 - **零依赖。** 纯粹基于 `hmac`/`hashlib` 实现 —— 不依赖 `itsdangerous`。 ## 安装 ``` pip install larzsession ``` ## 用法 ``` from larzsession import Serializer, CSRF, cookie s = Serializer("secret") tok = s.dumps({"uid": 1}) data = s.loads(tok, max_age=86400) csrf = CSRF("secret") t = csrf.generate(); csrf.validate(t) set_cookie = cookie("session", tok, max_age=86400, samesite="Strict") # 'session=...; Max-Age=86400; Path=/; Secure; HttpOnly; SameSite=Strict' ``` 底层接口 `Signer` / `TimestampSigner` 也已对外暴露。它们基于与 [larzcrypt](https://github.com/larz-scripter/larzcrypt) 相同的 HMAC 原语构建。 ## 测试 ``` python -m unittest discover -s tests -v # 13 tests ``` ## Larz 技术栈 [github.com/larz-scripter](https://github.com/larz-scripter) 下 30 多个纯 Python、零依赖库之一。 ## 许可证 MIT © larz-scripter
标签:CSRF, HMAC签名, Python, Syscall, Web开发, 会话管理, 无后门, 逆向工具