安全与风控
codingas.com 遵循零信任安全架构,请求经过 IP 封禁、认证、限流多层检查,API Key 与上游凭证均加密存储。
安全拦截器链
Section titled “安全拦截器链”请求按以下顺序检查(任一层拒绝即返回):
| 顺序 | 拦截器 | 职责 | 失败响应 |
|---|---|---|---|
| 1 | IP 黑名单 | 封禁 IP 拦截(/api/**、/v1/**、/anthropic/**) | 403 {"code":"ACCESS_DENIED","message":"Access denied: IP blocked"} |
| 2 | API Key 认证 | /v1/*、/anthropic/* 路径校验调用方 Key | 401 {"code":"UNAUTHORIZED","message":...} |
| 3 | 会话认证 | /api/v1/* 路径校验 Sa-Token 登录态 | 401 未登录 |
| 4 | 角色授权 | 管理端点按 ADMIN / USER 白名单放行(USER:模型 / 应用只读、体验中心、自己的 Key) | 403 ACCESS_DENIED |
| 5 | 限流 | API Key 级令牌桶 | 429 {"error":{"code":"RATE_LIMIT_EXCEEDED",...}} |
IP 黑名单
Section titled “IP 黑名单”已实现。被封锁的 IP 访问受保护路径时返回 403。客户端 IP 提取顺序:X-Forwarded-For -> X-Real-IP -> RemoteAddr。
⚠️ IP 黑名单的领域服务(封禁/解封)已实现,但管理 API 端点暂未暴露,当前需通过管理后台操作。
所有上游 Provider Key 使用 AES-256-GCM 加密存储,密钥获取顺序:gateway.security.encryption-key 配置属性 → 环境变量 ENCRYPTION_KEY → 开发环境临时密钥:
# 生成 32 字节 Base64 密钥openssl rand -base64 32export ENCRYPTION_KEY="<生成的密钥>"- 生产环境(非 dev/local profile)必须配置,否则启动抛
ENCRYPTION_KEY_MISSING - 环境变量名为
ENCRYPTION_KEY;GATEWAY_ENCRYPTION_KEY仅在localprofile 的 yml 映射中生效(详见 安装部署) - 调用方 API Key 不存明文:仅存前缀(
keyPrefix)+ SHA-256 哈希,认证时按前缀查库再哈希比对
列表与详情接口不返回明文,仅返回脱敏后的 key_hint / keyPrefix(如 sk-****abcd)。
PII 脱敏
Section titled “PII 脱敏”启动时预置 8 条敏感数据规则(手机号、身份证、银行卡、邮箱、地址、密码、信用卡、SSN),支持正则匹配与掩码格式。
⚠️ 规则已定义入库,但脱敏执行尚未接入请求链路,当前版本暂不生效。
规划中(当前未实现)
Section titled “规划中(当前未实现)”以下能力为规划功能,当前版本尚未落地:
- IP 白名单(仅 DB 字段预留)
- UA 过滤
- 内容审核(
/v1/moderations) - 国密算法(SM2/SM3/SM4,当前使用 AES-256-GCM)
- 完整审计链(WORM)
| 功能 | 状态 |
|---|---|
| 认证中间件(Token 验证) | ✅ |
| 角色授权(ADMIN / USER) | ✅ |
| IP 黑名单 | ✅ |
| IP 白名单 | 规划中 |
| UA 过滤 | 规划中 |
| PII 脱敏(规则已定义,执行待接入) | 规划中 |
| 数据掩码策略 | ✅ |
| 审计日志 | ✅ |
| 密钥加密存储(AES-256-GCM) | ✅ |
| 国密算法(SM2/SM3/SM4) | 规划中 |
| 完整审计链(WORM) | 规划中 |