独立开发者,也需要自己的安全清单
Indie developers need a security checklist too以前在公司工作时,很多安全措施几乎是隐形的。
公司邮箱、设备管理、权限审批、代码审查、生产环境、用户数据,都有人制定规则。一个人做产品后,这层保护突然消失了。
域名、代码、数据库、API、支付、用户信息,都集中在自己手里。你不只是产品经理、设计师和开发者,也变成了自己的 IT、安全和事故响应团队。
而独立产品最常见的安全问题,往往不是什么复杂攻击,只是一个低级错误被快速放大。
1. 把 API Key 当作权限,而不是一串字符
API Key、数据库密码、云服务 credential、支付 secret,本质上都是一份授权。
拿到它的人,可能可以替你调用服务、产生费用、读取数据,甚至修改或删除资源。
所以我现在会遵守几个底线:
- 不把 secret value 放进代码、AI chat、截图、Issue、日志或文档;
- 不把服务端 secret 放进浏览器或移动端;
- 本地开发使用 .env,并在提交代码前加入 .gitignore;
- 生产环境使用部署平台提供的 secret 管理;
- 开发、测试和生产使用不同 credentials;
- 能限制权限、额度和作用域的,尽量限制。
.env 也不是保险柜。它只是避免把 secret 直接写进代码。文件如果被上传、共享、记录到日志,仍然可能泄露。
还有一个很重要的原则:
如果 secret 已经提交到 Git,后来把文件删掉并不够。它可能仍然存在于 Git 历史中。
这时第一件事不是“藏好痕迹”,而是立即 revoke 或 rotate,换一份新的 credential。
2. 保护真正控制产品的几个账户
对独立产品来说,最重要的账号未必是产品后台,而是:
- 主邮箱;
- GitHub;
- 域名注册商;
- 云服务和部署平台;
- 数据库;
- 支付账户。
其中一个被拿走,都可能让你失去整个产品的控制权。
这些账号至少应该使用不同密码、开启 MFA,并妥善保存 recovery codes。
尤其是主邮箱。很多账户都可以通过邮箱重置密码,它其实是所有权限的总入口。
3. 不要只问“文件能不能上传”
上传到第三方服务,不一定等于文件公开在互联网上。
但它意味着信息已经离开了你完全控制的环境。
我现在更愿意问:
- 文件会去哪里?
- 谁可能访问?
- 会保留多久?
- 能否删除?
- 是否一定要上传完整原件?
- 能不能用脱敏数据、测试数据或本地工具完成?
独立开发时,生产数据库、用户资料、后台截图和真实日志尤其需要谨慎。
为了让 AI 帮忙 debug,直接把整份生产数据、完整日志或用户信息贴进 chat,通常不是唯一选择。
很多时候,只保留报错结构、字段名称和最小复现样例就够了。
4. 给 AI agent 的权限,也要计算最坏后果
AI agent 可以读取代码、运行命令、修改文件、访问 GitHub,甚至连接邮件、云盘和数据库。
这让一个人做产品的效率提高了很多,也意味着一个错误动作可以走得更远。
授权之前,我会考虑:
- 它真的需要整个仓库,还是一个目录?
- 需要写权限,还是只读就够?
- 是否需要访问生产环境?
- 删除、部署、发送和支付等动作,是否需要人工确认?
- 不再使用后,我是否会撤销权限?
重点不是假设工具一定会出错,而是即使出错,也不要让一次错误带走全部资产。
5. 不只防止事故,也要准备恢复
没有任何系统能保证永远不出问题。
所以安全还包括:
- 是否有数据库备份;
- 备份是否真的能够恢复;
- 是否开启异常登录、费用和调用提醒;
- API 是否有限额或速率限制;
- 是否知道 key 泄露后该去哪里撤销;
- 是否能快速回滚错误部署;
- 是否知道哪些用户需要被通知。
真正实用的安全,不是追求零风险,而是控制一次事故的影响范围。
独立产品安全自检
我会至少检查这 12 件事:
- 主邮箱、GitHub、域名、云服务和支付账户已开启 MFA
- 重要账户没有复用密码
- Recovery codes 已离线保存
- 代码、chat、截图和日志里没有 secret value
- .env 等敏感文件已加入 .gitignore
- 确认敏感文件从未进入 Git history
- 生产 secret 储存在部署平台的 secret 管理中
- 开发、测试、生产 credentials 已分开
- 前端 bundle 中没有服务端 secret
- 第三方工具和 agent 只获得必要权限
- API、云服务和支付平台已设置费用或异常提醒
- 数据有备份,并至少验证过一次恢复流程
一个人做产品,意味着很多东西都可以自己决定。
但自由的另一面是:没有人会自动替你检查这些边界。
安全不一定是产品里最令人兴奋的部分。
可一旦出问题,它很可能突然变成最重要的部分。