关于本论坛的安全细节
作为一款注重用户隐私的社区平台,MyndBBS 在安全设计上投入了大量精力。本文将介绍本论坛的技术安全细节,帮助您了解我们如何保护您的账号和数据安全。
一、端到端加密(E2EE)
私信功能是本论坛的核心特性之一。我们采用 端到端加密 确保您的私人通信只有对话双方可以阅读,即使是服务器管理员也无法解密。
加密架构
| 层级 | 技术方案 | 说明 |
|---|---|---|
| 密钥交换 | P-521 ECDH | 椭圆曲线 Diffie-Hellman,提供 521 位安全级别 |
| 后量子加密 | ML-KEM-1024 | 抗量子计算的密钥封装机制(X-Wing 混合方案) |
| 密钥派生 | HKDF-SHA256 | 从共享密钥派生最终的 AES 加密密钥 |
| 消息加密 | AES-256-GCM | 带认证标签的对称加密,防篡改 |
工作流程
- 发送消息时,使用您的私钥与对方的公钥通过 ECDH 派生共享密钥
- 结合 ML-KEM-1024 的共享密钥形成混合密钥材料
- 通过 HKDF 导出 AES-256-GCM 会话密钥
- 加密后的消息以 Base64 格式传输
私钥保护
您的私钥本身使用独立的 AES-256-GCM 密钥加密存储。每次登录时,您需要输入密码解锁私钥。我们不会在服务器端存储您的明文私钥或密码。
二、认证与授权体系
JWT 双 Token 机制
| Token 类型 | 有效期 | 存储方式 |
|---|---|---|
| Access Token | 15 分钟 | HttpOnly Cookie |
| Refresh Token | 较长有效期 | HttpOnly Cookie |
- Access Token 过期前会自动刷新,无需频繁登录
- Token 签名使用 HS256 算法,密钥由环境变量
JWT_SECRET提供 - 生产环境下强制使用 HTTPS 传输(Secure Cookie)
CASL 细粒度权限控制
我们采用 CASL 权限引擎实现基于角色的访问控制(RBAC):
| 角色 | 权限范围 |
|---|---|
| SUPER_ADMIN | 完全控制权(manage all) |
| ADMIN | 完全控制权(manage all) |
| MODERATOR | 读取所有 + 管理面板访问权 |
| 版主 | 仅限管辖分类内的管理权限 |
| 普通用户 | 读写自己创建的内容 |
| 游客 | 仅读取公开且无等级限制的内容 |
权限规则支持数据库驱动,允许管理员在不修改代码的情况下调整权限配置。
会话管理
- 会话状态缓存在 Redis 中,加速验证
- 支持会话撤销(强制登出)
- 被封禁用户无法通过缓存的 Token 继续访问
三、无密码认证(Passkeys)
我们支持基于 WebAuthn 标准的 Passkeys 无密码登录。
技术特性
- 平台认证器:支持 macOS Keychain、Windows Hello、手机指纹等
- Resident Key:登录时无需输入用户名
- 用户验证:优先要求生物特征验证(指纹、面容、PIN)
安全性优势
- 不存在密码泄露风险
- 无法被钓鱼攻击骗取
- 私钥永远不离设备
首次设置 Passkey 后,您可以在安全设置中管理已注册的认证器。
四、两步验证(TOTP)
为账号安全提供额外保护层。
加密存储
您的 TOTP 密钥(Base32 格式)不会明文存储在数据库中。我们使用:
- AES-256-GCM 加密算法
- HKDF-SHA256 从
JWT_SECRET派生加密密钥 - 认证标签(Auth Tag) 检测密文篡改
v1:前缀 区分加密数据与遗留明文数据
敏感操作二次认证
以下高风险操作需要进入 Sudo 模式(重新验证身份后执行):
- 删除已注册的 Passkey
- 修改或禁用 TOTP 两步验证
- 修改安全相关的账号设置
五、速率限制
为防止暴力破解、灌水和滥用,我们部署了多层级限流:
| 场景 | 限制规则 |
|---|---|
| 发帖/评论 | 5 分钟内最多 10 次 |
| 文件上传 | 10 分钟内最多 5 次 |
| 好友请求 | 1 小时内最多 20 次 |
| 公开读取 | 1 分钟内最多 30 次 |
限流基于客户端 IP(经代理识别后的真实 IP)计算。
六、HTTP 安全头部
后端使用 Helmet.js 设置安全相关的 HTTP 头部,包括但不限于:
X-Content-Type-Options: nosniff— 防止 MIME 类型嗅探Content-Security-Policy— 限制资源加载来源- CORS 白名单 — 仅允许配置的域名跨域请求
CSRF 防护
针对非安全 HTTP 方法(POST/PUT/DELETE),我们验证:
Origin请求头必须在允许的域名列表中X-Requested-With头必须为XMLHttpRequest
文件下载安全
访问上传文件时:
- 头像文件:以内联方式展示,设置
Content-Disposition: inline - 其他文件:强制下载,设置
Content-Disposition: attachment - 点文件(
.gitignore等)一律拒绝访问
七、Cookie 安全配置
| 属性 | 值 | 作用 |
|---|---|---|
| HttpOnly | true | 禁止 JavaScript 读取 |
| Secure | production 环境为 true | 仅通过 HTTPS 传输 |
| SameSite | lax | 限制跨站请求携带 |
| Path | /api | 仅在 API 路径下生效 |
八、代码层面安全
输入限制
- 请求体大小限制:100KB
- URL 编码数据大小限制:100KB
安全默认值
- 隐藏
X-Powered-By响应头 - 禁用调试模式
- 生产环境校验
JWT_SECRET和JWT_REFRESH_SECRET必须不同
审计日志
后端集成审计中间件,记录关键操作的元数据。
九、隐私保护
- 私信内容采用端到端加密,服务器无法解密
- 数据库中不存储明文敏感信息
- 符合 GDPR 和《个人信息保护法》(PIPL)要求
十、安全建议
作为用户,您也可以采取措施提升账号安全:
- 启用 Passkeys:使用生物特征登录,无密码泄露风险
- 开启两步验证:即使密码泄露,攻击者也无法登录
- 使用强密码:如果使用密码登录,确保密码足够复杂且唯一
- 警惕钓鱼:我们不会通过私信索要您的密码或验证码
- 及时举报:发现可疑行为或收到违规私信,请使用举报功能
MyndBBS 致力于为用户提供安全、可靠的社区环境。我们将持续关注安全领域的新技术,不断优化平台安全能力。
如您对安全有任何疑问或建议,欢迎通过站内渠道反馈。