大语言模型插件(比如那些帮你写代码的助手)越来越火,但它们背后藏着一个大问题:服务商可以看到甚至拿走你所有输入的内容,包括你的代码、API密钥和数据库密码!
如果走的官方接口,例如 Copilot、阿里、腾讯那么会泄露给这些大厂,你可以从主观上默认他们遵守协议规则不存不看。
但如果是配置的其它的三方接入地址,尤其因为网络等各种问题接了其它中转商,他们完全可以拦截过滤所有提交内容中自己感兴趣的部分。
为什么他们能看到
- LLM靠“上下文”干活: LLM必须看你输入的内容(代码、问题描述等)才能理解你要它做什么。这就像你跟人聊天,对方得知道上下文。
- 中间商是明文必经之路: 只要你用的LLM功能(比如IDE里的代码补全插件)不是直接连到模型(如GPT)。它都需要先把你输入的东西发给中间服务商,服务商再转发给模型,拿到结果后再返回给你。
- 程序员风险最大: 写代码时,你很容易在文件里放测试用的API密钥(
apiKey = "sk-xxx"
)、数据库密码等。当你用LLM插件(比如让它优化代码或解释错误),插件会自动抓取你当前编辑的代码块(上下文),连带着这些敏感信息一起发给中间商!
中间商的风险原理:合法但危险
- 不是黑客,没有技术难度: 和传统“中间人攻击”(黑客窃听)不同,这些服务商是你合法授权使用的,风险在于他们可以滥用你给的数据。
- 他们控制数据流: 你的请求和模型的回复都必须经过他们的服务器。这让他们能:
- 看数据: 如果传输没加密好,或者密钥在他们手里,你的明文信息(代码、密钥)等于在他们面前“裸奔”。
- 存数据: 他们可能打着“改进服务”的旗号,把你交互的完整上下文(含敏感信息)存下来。存得越多,泄露风险越大。
- 挖数据: 更可怕的是,他们可能用技术主动扫描你上传的文本,专门提取里面的密钥、密码等结构化信息。这就完全超出了“中转”的本分。
IDE插件:高危现场!
- 自动抓取上下文: 你写代码时,按个Tab触发补全,或者点一下“解释这段代码”,插件瞬间就抓取了你当前编辑窗口的一大片代码(前后N行) 发走。
- 过滤是摆设: 有些插件说能过滤敏感词(如
apiKey
, secret
)。但通常就靠简单关键词匹配。如果你用my_aws_key
或db_pass
这种自定义名字,密钥照样被原样上传! - 你根本不知道: 这些上传动作很隐蔽,没有明显提示。你可能随手一操作,密钥就发出去了。
如何防御
- 选靠谱工具:
- 优先考虑能本地运行的模型(如Llama 3),数据不出门。
- 如果用第三方服务,选明确承诺“零数据留存” 并尽量挑选值得信任的大厂。
- 管好你的数据:
- 不要在代码里硬编码密钥密码!可以在代码里引用环境变量(如
${DB_PASSWORD}
)。 - 用
git-secrets
等工具在提交代码前扫描,防止密钥误提交(也防止它进LLM上下文)。
- 提高警惕: 时刻记住,你输入给LLM的任何内容(代码、提示)都可能被中间商看到或存下。像保护密码一样保护你的上下文!