安全

最后更新:2026年4月

密码存储

密码使用 bcrypt(cost factor 12)进行哈希处理后存储。明文密码不会存储在服务器内存中,哈希处理后立即丢弃。注册时通过 Have I Been Pwned API 检查密码是否已泄露,有泄露记录的密码将被拒绝。

令牌与会话

认证令牌使用 HS256 算法签名的 JWT。生产环境要求 JWT 密钥至少 32 个字符,不满足则服务器无法启动。

刷新令牌使用 bcrypt(cost factor 10)哈希后存储。每次使用时进行轮换(rotation)——发放新令牌并作废旧令牌。访问令牌和刷新令牌的 TTL 均可按项目配置。

会话在服务端管理,记录 IP 地址、User Agent 和最后活动时间。用户可以在控制台查看活跃会话并撤销单个或所有会话。

多因素认证

支持基于 TOTP 的多因素认证。TOTP 密钥使用 AES 加密存储。每个用户生成 10 个备用码,使用 HMAC-SHA256 哈希存储。备用码验证使用常量时间比较以防止时序攻击。

OAuth 与社交登录

OAuth state 参数使用 crypto.randomBytes(32) 生成以防止 CSRF 攻击。支持 20 个 OAuth 提供商,回调 URL 按项目限制。

Passkeys (WebAuthn)

基于 FIDO2/WebAuthn 标准支持通行密钥认证。服务端验证使用 SimpleWebAuthn 库。

网络安全

所有通信通过 TLS 加密。HSTS(HTTP Strict Transport Security)以 1 年 max-age 强制执行。

CORS 使用动态白名单,仅允许项目注册的域名。不使用通配符(*)。

API 服务器使用 Helmet 中间件设置 Content-Security-Policy、X-Frame-Options (DENY)、X-Content-Type-Options (nosniff) 等安全头。

暴力破解防护

记录每个用户的登录失败次数。默认 5 次失败后锁定账户 300 秒(5 分钟)。这些阈值可在项目安全设置中配置。登录成功后重置失败计数器。

可按项目启用 Cloudflare Turnstile CAPTCHA,为注册和登录添加机器人防护。

输入验证

所有 API 输入使用 class-validator 验证。未识别的字段自动剥离(白名单模式),包含禁止字段的请求被拒绝。密码最少要求 8 个字符。数据库查询使用 TypeORM 参数化查询以防止 SQL 注入。

Webhook 安全

每个 Webhook 端点创建时自动分配唯一的签名密钥。Webhook 负载使用 HMAC-SHA256 签名,通过 X-Authon-Signature 头随时间戳一起传递。发送失败时自动重试最多 3 次。

漏洞报告

如果您发现安全漏洞,请发送邮件至 security@authon.dev。请勿公开提交 issue,直接通过邮件联系我们。

Authon — Universal Authentication Platform