安全下载与正版溯源:源码售卖的底线设计
源码售卖的核心不是把文件发出去,而是让每一次下载可授权、可追溯、可失效。本次产品更新围绕短时签名、次数约束、指纹文件与许可证池,说明我们不向买家存储明文下载密钥的工程底线。
本次产品更新围绕一个并不新、但常被忽略的问题:源码交付的底线不只是“发得出去”,更在于“发得可控”。
从交付文件到交付权限
源码售卖的风险在于:一次复制,可能长期脱离控制。因此我们把交付对象从“一个可下载的压缩包”改为“一组可验证、可过期、可撤销的下载权限”。文件仍在对象存储中,但买家拿到的不是永久地址,而是一次请求后生成的短时签名链接。
短时签名:让链接只在必要时间存在
下载请求到达后,服务端校验订单、许可证状态、剩余次数和文件指纹,再签发带有效期的访问签名。签名绑定订单与文件校验值,过期即失效;必要时可限制为单次使用。签名密钥由密钥管理服务托管并定期轮换,应用侧只申请最小权限,不在数据库、日志或前端暴露明文密钥。
次数与许可证池:把商业承诺变成可计算约束
“次数”约束下载行为,不改变已授予的使用权;“许可证池”管理授权容量与状态。每次售卖从池中分配许可证,下载次数与许可证独立记录,避免把“能下载几次”误当成“授权多久”。当退款、违约或风控触发时,冻结许可证池中的对应条目,即可停止后续交付。这里的关键是:买家不持有明文下载密钥,只持有与其订单绑定的短期凭证;服务端也不保存可直接复用的下载密钥。
指纹文件:让每份交付可回溯
每次生成交付包时,附带一份指纹文件,记录订单标识、许可证标识、文件校验值、生成时间与签名。它不改变源码语义,却能让后续流通中的副本回到具体交付批次。指纹文件应与包内清单和校验值一起签名,避免被单独替换。溯源的目的不是制造威慑,而是在授权争议、泄露排查和合规审计时提供可验证依据。
审计、撤销与最小暴露
下载事件记录订单、许可证、指纹、结果与必要请求上下文;敏感字段脱敏,日志不记录明文密钥。撤销通过过期签名、冻结许可证、标记指纹实现,历史记录保留但不继续授权。工程上坚持三条底线:默认不持久化明文下载密钥;签名权限与下载权限分离;任何人工操作都留审计痕迹。
底线清单
- 下载链接短时签名,默认不落库
- 下载次数与许可证池分别约束
- 每份交付带签名指纹文件与校验值
- 买家不持有明文下载密钥
- 密钥托管、轮换、最小权限
- 下载、撤销、异常均可审计