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开发, 会话管理, 无后门, 逆向工具