Skip to content

安全设计

Scion 模块以安全优先原则构建。每个模块都实现这些不可妥协的安全要求。

核心原则

1. 永远不信任客户端输入

所有用户输入在处理前都会被验证、清理和长度限制。

2. 纵深防御

多层保护:输入验证、限流、输出转义。

3. 安全失败

错误返回通用消息。不向客户端泄露内部细节。

安全特性

输入验证

  • CRLF 注入防护 — 在所有用户输入(头部、URL、名称)中拒绝 \r\n
  • 空字节拒绝 — 在所有字符串输入中拒绝 \x00
  • 长度限制 — 所有用户提供的字符串都有最大长度检查(128-1024字符,根据上下文)

内存保护

  • 内存耗尽防护 — 无界增长的 map/slice 必须有 maxBucketsmaxEntries 限制 + LRU 淘汰
  • 限流 — 固定窗口、滑动窗口和令牌桶算法

路径安全

  • 路径遍历防护 — 使用 filepath.Base() + 在所有文件操作中拒绝 ..
  • 不信任 X-Forwarded-ForClientIP() 仅返回 r.RemoteAddr;XFF 是客户端可控的,可伪造

SQL 安全

  • 参数化查询 — 永远不拼接用户输入到 SQL

HTTP 安全

  • Panic 恢复 — 所有 HTTP handler 必须从 panic 中恢复
  • 请求体大小限制 — 防止大载荷攻击
  • 超时 — 防止 slowloris 攻击

模块特定安全

模块安全特性
Auth限流,用户枚举防护,JTI,aud/iss 验证
CRUD排序/过滤白名单,SQL注入防护,分页上限
MiddlewareCRLF 注入防护,可信代理,请求体大小限制
RBAC通配符权限,循环检测,层级继承
Rate Limit内存耗尽防护,LRU 淘汰,键长度限制
Validation正则DoS防护 (RE2),空字节/CRLF 拒绝,panic 恢复
File Upload魔数校验,路径遍历防护,大小限制
HealthSSRF 防护(私有IP拒绝),CRLF 注入防护
Cache后台清理,goroutine 泄漏防护,最大条目限制
Pagination游标 Base64 校验,负偏移钳制,最大限制强制
Mail头部注入防护,XSS 转义,附件清理

安全清单

适配任何模块时,确保:

  • [ ] 所有用户输入在处理前都经过验证
  • [ ] 所有字符串都强制长度限制
  • [ ] 敏感端点配置了限流
  • [ ] SQL 查询使用参数化语句
  • [ ] 文件路径使用 filepath.Base() 清理
  • [ ] 错误消息不泄露内部细节
  • [ ] HTTP handler 从 panic 中恢复

测试安全性

每个模块包含 pentest_test.go,包含攻击场景测试用例:

bash
cd registry/<module>/src/go
go test -v -run Pentest ./...

测试覆盖包括:

  • CRLF 注入尝试
  • 空字节注入
  • 路径遍历尝试
  • SQL 注入尝试
  • 内存耗尽尝试
  • 限流绕过尝试

Released under the MIT License.