LangChain 拥有庞大的集成生态系统,可连接本地和远程文件系统、API、数据库等多种外部资源。这些集成让开发者能够创建多用途应用,将 LLM 的能力与访问、交互和操作外部资源的能力结合起来。

最佳实践

构建这类应用时,开发者应遵循良好的安全实践:
  • 限制权限:根据应用的具体需求限定权限范围。授予过宽或过高的权限可能引入严重安全漏洞。为避免这类漏洞,请根据应用需要考虑使用只读凭据、禁止访问敏感资源、使用沙箱技术(例如在容器中运行)、指定代理配置以控制外部请求等措施。
  • 预判潜在误用:人会出错,大语言模型 (LLM) 也会出错。始终假设任何系统访问权限或凭据都可能以其权限允许的任何方式被使用。例如,如果一组数据库凭据允许删除数据,最安全的假设是任何能够使用这些凭据的 LLM 实际上都可能删除数据。
  • 纵深防御:没有任何安全技术是完美的。微调和良好的链设计可以降低大语言模型 (LLM) 出错的概率,但无法完全消除这种可能性。最好组合多层安全方法,而不是依赖任何单一防御层来确保安全。例如,同时使用只读权限和沙箱,确保 LLM 只能访问明确供其使用的数据。
不这样做的风险包括但不限于:
  • 数据损坏或丢失。
  • 未授权访问机密信息。
  • 关键资源的性能或可用性受损。
示例场景和缓解策略:
  • 用户可能要求有文件系统访问权限的代理删除不应删除的文件,或读取包含敏感信息的文件内容。为缓解此风险,将代理限制为只能使用特定目录,并且只允许它读取或写入可安全读写的文件。还可以考虑通过在容器中运行代理来进一步沙箱化。
  • 用户可能要求对外部 API 有写入权限的代理向 API 写入恶意数据,或从该 API 删除数据。为缓解此风险,请向代理提供只读 API key,或限制它只能使用已经能够抵御这类误用的端点。
  • 用户可能要求有数据库访问权限的代理删除表或修改 schema。为缓解此风险,将凭据范围限定为代理需要访问的表,并考虑发放 READ-ONLY 凭据。
如果你正在构建访问文件系统、API 或数据库等外部资源的应用,请考虑与公司的安全团队沟通,确定如何以最佳方式设计并保护应用。

报告 OSS 漏洞

请按照以下流程报告与 LangChain 开源项目相关的安全漏洞:
  1. 提交 security advisory:在漏洞所在 GitHub repository 的 Security 标签页中提交。
  2. 发送邮件:发送邮件到 security@langchain.dev,告知你已提交安全问题以及提交所在的 repository。
报告漏洞前,请查看上面的最佳实践,了解哪些情况被视为安全漏洞,哪些属于开发者责任。

Bug bounty 资格

LangChain 欢迎所有 LangChain 库的安全漏洞报告。不过,只有以下包中的漏洞可能获得临时 bug bounty:
  • LangChain 团队拥有并维护的核心库:langchain-corelangchain (v1)、langgraph 以及相关 checkpointer 包(或其 JavaScript 等价包)
  • LangChain 团队维护的热门集成(例如 langchain-openailangchain-anthropic 等,或其 JavaScript 等价包)
漏洞必须存在于库代码本身,而不是示例代码或示例应用中。 LangChain 欢迎报告所有其他 LangChain 包的问题,并会处理有效的安全问题,但范围之外的包不会获得 bug bounty。这包括已归档的 langchain-community,由于它由社区驱动,因此不具备 bug bounty 资格,但 LangChain 仍会接受并处理报告。

范围之外的目标

以下内容不在安全漏洞报告范围内:
  • langchain-experimental:这个已归档 repository 用于实验性代码,不在安全报告范围内(请参阅包警告)。
  • 示例和示例应用:示例代码和演示应用不在安全报告范围内。
  • 带有安全说明的代码:这会逐案决定,但通常不在范围内,因为相关代码已经在文档中提供了开发者应遵循的应用安全指导。
  • LangSmith 相关 repository 或 API:请参阅下面的报告 LangSmith 漏洞

报告 LangSmith 漏洞

请通过邮件向 security@langchain.dev 报告与 LangSmith 相关的安全漏洞。

其他安全问题

如有任何其他安全问题,请通过 security@langchain.dev 联系 LangChain。