Skip to main content
LangChain 拥有一个庞大的生态系统,与各种外部资源(如本地和远程文件系统、API 和数据库)集成。这些集成允许开发人员创建结合 LLM 强大功能与访问、交互和操作外部资源能力的多功能应用程序。

最佳实践

在构建此类应用程序时,开发人员应记住遵循良好的安全实践:
  • 限制权限:根据应用程序的需要具体范围化权限。授予广泛或过多的权限可能会引入重大安全漏洞。为避免此类漏洞,请根据应用程序的需要,考虑使用只读凭据、禁止访问敏感资源、使用沙箱技术(例如在容器中运行)、指定代理配置以控制外部请求等。
  • 预见潜在的误用:就像人类可能出错一样,大型语言模型(LLM)也可能出错。始终假设任何系统访问或凭据可能会以其分配的权限允许的任何方式使用。例如,如果一对数据库凭据允许删除数据,最安全的假设是任何能够使用这些凭据的 LLM 都可能实际删除数据。
  • 深度防御:没有一种安全技术是完美的。微调和良好的链设计可以减少但不能消除大型语言模型(LLM)可能犯错的几率。最好结合多种分层安全方法,而不是依赖任何单一的防御层来确保安全。例如:同时使用只读权限和沙箱技术,以确保 LLM 只能访问明确为其使用的数据。
不遵循这些实践的风险包括但不限于:
  • 数据损坏或丢失。
  • 未经授权访问机密信息。
  • 关键资源的性能或可用性受到损害。
示例场景及缓解策略:
  • 用户可能会要求具有文件系统访问权限的代理删除不应删除的文件或读取包含敏感信息的文件内容。为缓解此问题,将代理限制为仅使用特定目录,并仅允许其读取或写入安全的文件。进一步通过在容器中运行代理对其进行沙箱化。
  • 用户可能会要求具有写入外部 API 权限的代理向 API 写入恶意数据,或从该 API 删除数据。为缓解此问题,向代理提供只读 API 密钥,或将其限制为仅使用已对这种误用具有抵抗力的端点。
  • 用户可能会要求具有数据库访问权限的代理删除表或更改架构。为缓解此问题,将凭据范围限定为代理需要访问的表,并考虑发放只读凭据。
如果您正在构建访问外部资源(如文件系统、API 或数据库)的应用程序,请考虑与您公司的安全团队交谈,以确定如何最好地设计和保护您的应用程序。

报告开源漏洞

请使用以下流程报告与 LangChain 开源项目相关的安全漏洞:
  1. 提交安全公告 在漏洞所在的 GitHub 存储库的安全选项卡中提交。
  2. 发送电子邮件security@langchain.dev,通知我们您已提交安全问题以及提交的存储库。
在报告漏洞之前,请查看上方的最佳实践,以了解我们认为哪些是安全漏洞与开发人员责任的区别。

漏洞奖励计划资格

我们欢迎所有 LangChain 库的安全漏洞报告。然而,我们可能仅对以下包中的漏洞提供临时漏洞奖励:
  • LangChain 团队拥有和维护的核心库:langchain-corelangchain(v1)、langgraph 和相关的检查点包(或其 JavaScript 等价物)。
  • LangChain 团队维护的流行集成(例如 langchain-openailangchain-anthropic 等,或其 JavaScript 等价物)。
漏洞必须存在于库代码本身,而不是示例代码或示例应用程序中。 我们欢迎所有其他 LangChain 包的报告,并将解决有效的安全问题,但漏洞奖励不会授予超出此范围的包。这包括 langchain-community,由于其社区驱动的性质,不符合漏洞奖励计划的资格,尽管我们会接受和解决报告。

不在范围内的目标

以下内容不在安全漏洞报告范围内:
  • langchain-experimental:此仓库用于实验代码,不在安全报告范围内(见 package warning)。
  • 示例和示例应用程序:示例代码和演示应用程序不在安全报告范围内。
  • 代码已用安全通知文档化:这将根据个案决定,但很可能不在范围内,因为代码已经用指南文档化,开发者应遵循这些指南以确保其应用程序安全。
  • LangSmith 相关的仓库或 API:见 Reporting LangSmith Vulnerabilities 下方。

报告 LangSmith 漏洞

请将与 LangSmith 相关的安全漏洞通过电子邮件报告给我们,地址为 security@langchain.dev

其他安全关切

对于任何其他安全关切,请联系我们 security@langchain.dev