Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

安全边界

当前身份功能是安全 MVP,不代表服务已经完成公网生产加固。

密码

  • 密码只保存 Argon2id PHC 格式散列,每条凭据使用独立随机 salt。
  • 参数固定为 m=19456 KiB、t=2、p=1,符合当前项目采用的 OWASP 最低配置。
  • 散列和校验通过 Tokio blocking task 执行,不阻塞异步运行时线程。
  • 密码长度按 Unicode 字符计算,为 15–128;允许空格、符号和 Unicode。
  • 用户不存在时仍执行一次 Argon2id 运算;不存在与密码错误返回相同响应。

如果以后修改参数,登录校验必须继续兼容已有 PHC 字符串,并设计登录后升级 散列的路径。

Session

  • 浏览器只保存不透明 Session ID,数据位于 PostgreSQL。
  • Cookie 名为 rustloom_session,设置 HttpOnly、SameSite=Lax、Path=/, 不设置 Domain。
  • 登录和注册会轮换 Session ID,防止 Session fixation。
  • 每台设备使用独立 Session,退出只删除当前设备记录。
  • Session 闲置 12 小时过期;每次有效认证请求刷新活动时间。
  • 无论是否活跃,Session 创建 7 天后绝对失效。
  • 应用每小时删除一次已过期的数据库记录。
  • Session 表只能由 SQLx migration 创建,代码禁止调用 Store 的 migrate()。

本地 HTTP 开发使用 SESSION_COOKIE_SECURE=false。生产环境在 HTTPS 下必须使用:

SESSION_COOKIE_SECURE=true

数据和错误

  • .env、生产连接串、Cookie 文件和数据库密码不得提交。
  • SQL 使用绑定参数,公开 Profile 模型不含 password_hash。
  • 数据库、Session 与密码服务的底层错误只写入服务端标准错误流;客户端仅收到 稳定错误码。
  • 服务未开放 CORS,身份 API 按同源浏览器应用设计。

尚未覆盖

首版明确不包含:

  • 注册和登录限流、安全审计与异常登录检测;
  • 邮箱验证、密码找回和密码修改;
  • CSRF Token、内容安全策略与可信代理配置;
  • 角色、权限、管理员、Tenant 和第三方登录;
  • 全设备 Session 列表与一键退出。

在补齐限流、审计、邮箱验证策略、CSRF 威胁评估、TLS 和部署安全审查之前, 不得把身份 API 描述为公网生产就绪。