安全策略
LangChain 拥有一个庞大的生态系统,集成了各种外部资源,如本地和远程文件系统、API 和数据库。这些集成使开发者能够创建多功能应用程序,将 LLM 的强大功能与访问、交互和操作外部资源的能力结合起来。
最佳实践
在构建此类应用程序时,开发人员应记住遵循良好的安全实践:
- 限制权限: 将权限范围具体限定为应用程序的需求。授予广泛或过多的权限可能会引入重大的安全漏洞。为了避免此类漏洞,请考虑使用只读凭据、禁止访问敏感资源、使用沙盒技术(例如在容器内运行)、指定代理配置以控制外部请求等,根据您的应用程序适当选择。
- 预见潜在的误用:正如人类可能会犯错,大型语言模型(LLMs)也可能出错。始终假设任何系统访问或凭证可能会以它们被分配的权限所允许的任何方式使用。例如,如果一对数据库凭证允许删除数据,那么最安全的假设是,任何能够使用这些凭证的LLM实际上可能会删除数据。
- 深度防御:没有任何安全技术是完美的。微调和良好的链设计可以减少大型语言模型(LLM)犯错的几率,但不能完全消除。最好结合多层安全方法,而不是依赖任何单一防御层来确保安全。例如:同时使用只读权限和沙盒来确保LLM只能访问明确为其使用的数据。
不这样做的风险包括但不限于:
- 数据损坏或丢失。
- 未经授权访问机密信息。
- 关键资源的性能或可用性受到损害。
带有缓解策略的示例场景:
- 用户可能会要求具有文件系统访问权限的代理删除不应删除的文件或读取包含敏感信息的文件内容。为了缓解此问题,限制代理只能使用特定目录,并且只允许它读取或写入安全的文件。考虑通过在容器中运行代理来进一步沙箱化。
- 用户可能会要求具有外部API写入权限的代理向API写入恶意数据,或从该API删除数据。为了缓解这种情况,请为代理提供只读API密钥,或限制其仅使用已经能够抵抗此类滥用的端点。
- 用户可能会要求具有数据库访问权限的代理删除表或更改模式。为了缓解这种情况,应将凭据范围限制在代理需要访问的表上,并考虑颁发只读凭据。
如果您正在构建访问外部资源(如文件系统、API或数据库)的应用程序,请考虑与公司的安全团队讨论,以确定如何最好地设计和保护您的应用程序。
报告OSS漏洞
LangChain 与 Protect AI 的 huntr 合作,为我们的开源项目提供赏金计划。
请通过访问以下链接报告与LangChain开源项目相关的安全漏洞:
https://huntr.com/bounties/disclose/
在报告漏洞之前,请先查看:
- 范围内的目标和范围外的目标如下。
- langchain-ai/langchain 单仓库结构。
- 上面的最佳实践帮助我们理解什么是我们认为是安全漏洞与开发者责任的区别。
范围内目标
以下软件包和仓库有资格获得漏洞赏金:
- langchain-core
- langchain(参见例外情况)
- langchain-community(参见例外情况)
- langgraph
- langserve
超出范围的目标
由huntr定义的所有超出范围的目标以及:
- langchain-experimental: 该仓库用于实验性代码,不符合漏洞赏金资格(参见包警告),提交的漏洞报告将被标记为有趣或浪费时间,并发布时不附带赏金。
- 工具: 在langchain或langchain-community中的工具不符合漏洞赏金的条件。这包括以下目录
- libs/langchain/langchain/tools
- libs/community/langchain_community/tools
- 请查看最佳实践以获取更多详细信息,但通常工具会与现实世界交互。开发者应理解其代码的安全影响,并对其工具的安全性负责。
- 代码中记录了安全注意事项。这将根据具体情况决定,但可能不符合奖励条件,因为代码已经记录了开发者应遵循的指南,以确保其应用程序的安全性。
- 任何与LangSmith相关的仓库或API(参见报告LangSmith漏洞)。
报告LangSmith漏洞
请通过电子邮件向security@langchain.dev
报告与LangSmith相关的安全漏洞。
- LangSmith 网站: https://smith.langchain.com
- SDK 客户端: https://github.com/langchain-ai/langsmith-sdk
其他安全问题
对于任何其他安全问题,请联系我们 security@langchain.dev
。