Skip to content

Security

sungaowei edited this page Oct 16, 2026 · 2 revisions

安全机制 (Security)

English Version | 简体中文


TypeSafe AI Go SDK 专为企业生产级环境设计,在凭据保护、网络传输、报文边界及数据解析方面实施了多层严格防护。


凭证保护与自动脱敏

  • 请求头脱敏:SDK 自动对 Authorization、Cookie 以及包含 token 或 secret 的敏感请求头进行识别,并在日志输出时将其值替换为 ***。
  • 凭据隔离:API Key 通过 Authorization: Bearer <key> 标头发起认证,绝不会附加在 URL 参数、错误信息或日志事件的主干文本中。

受保护的系统标头

以下核心标头在客户端和调用选项合并后最后注入,调用方无法篡改或篡夺(无论大小写如何书写):

  • Authorization
  • Accept
  • User-Agent
  • X-TypeSafe-SDK
  • X-TypeSafe-Runtime

调用方若在请求中传入自定义的 X-TypeSafe-Retry-Count 标头将被自动清洗,防止干扰服务端重试计数统计。


URL 净化 (URL Sanitization)

在构造错误信息与日志记录时,所有请求的目标 URL 都会被统一格式化为脱敏后的 "METHOD URL" 形式:

  • 自动剔除账号密码(userinfo,如 https://user:pass@host);
  • 自动移除所有的 Query 查询参数与 Hash 片段。
// https://user:secret@example.test/v1/models?token=xyz 净化为:
// GET https://example.test/v1/models

即使调用方意外在 BaseURL 中混入了凭据或 Token,也绝不会泄露至错误日志或 APM 监控系统中。


禁用危险重定向 (No Redirects)

SDK 内置的 HTTP Client 默认不跟随任何 HTTP 3xx 重定向。 因为自动跟随重定向可能会导致认证标头(Authorization Bearer Token)或 POST 请求体被转发至不受信任的第三方镜像主机。一旦收到 3xx 响应,SDK 将直接作为 *APIError 抛出,由调用方显式决策。

若你的企业架构确实需要经过特定受信任的反向代理重定向,可通过 typesafe.WithHTTPClient 注入自定义的 http.Client 并自行配置 CheckRedirect 策略。


有界报文与内存保护

为防止恶意超大响应或格式炸弹耗尽客户端内存,SDK 实施了严格的读写字节上限保护:

保护项 上限限制 保护效果
响应体最大上限 16 MB (MaxResponseBodyLimit) 使用 io.LimitReader 限制读取,超出时立即截断并返回明确错误,防止 OOM。
单张图片资产上限 16 MiB (MaxImageSizeLimit) 本地文件或字节切片超过 16 MiB 时,NewImage 直接报错拦截。
请求体最大上限 32 MiB (MaxRequestBodyLimit) 请求体若超出 32 MiB,服务端直接返回 HTTP 413 *PayloadTooLargeError。
未知错误消息体截断 200 字节 (MaxErrorBodyLength) 对于无法解析为 JSON 的未知错误响应,错误信息最多截取前 200 字节,防止日志爆炸。

Gzip 压缩与传输优化

SDK 默认针对 $\ge 1\text{ KiB}$ 的请求报文透明启用 Gzip 压缩(WithCompression(true)),附带 Content-Encoding: gzip 标头。 这在传输包含大文本 State 或图片资产的多模态请求时,能够节省高达 70% 的网络带宽,显著降低传输时延与因网络丢包导致的失败率。


严格解码与反脆弱设计

服务端返回 2xx 成功时,SDK 采用严格解码策略:

  • 关键数字字段(如 Noul 概率、Choice 置信度)缺失或格式异常时,SDK 会显式返回 *typesafe.APIResponseValidationError 并指出具体字段路径;
  • 绝不静默补零:SDK 绝不会把缺失的数值反序列化为 0.0,从而避免把系统故障误判为“概率为 0”或“评分最低”,确保关键风控与决策系统的可靠性。

TLS 安全基线

SDK 默认的 Transport:

  • 强制要求 TLS 1.2 或更高版本;
  • 优先协商 HTTP/2 协议;
  • 连接池预设合理的 30 秒拨号超时与 100 连接的空闲复用上限。

Clone this wiki locally