"Jailbreaking"(越狱)和 "prompt injection"(提示注入)是试图让 Claude 忽略其准则或您的指令的行为。虽然 Claude 本身对此类攻击具有韧性,但本页面上的额外步骤可以加强您的防护措施,特别是针对违反 Anthropic 服务条款或使用政策的使用行为。
这些攻击分为两类,具有不同的威胁模型:
在此威胁模型中,用户故意构造输入来操纵您的应用程序,使其生成您不希望的内容或采取您不希望的操作。以下缓解措施可以加强您应用程序的防护:
无害性筛查: 使用像 Claude Haiku 4.5 这样的轻量级模型,在用户输入到达您的主对话之前对其进行预筛查。使用结构化输出将响应限制为简单的分类。
输入验证: 在用户输入到达 Claude 之前,过滤已知的注入模式。您可以通过提供已知的越狱语言作为示例,使用 LLM 创建一个通用的验证筛查。
提示工程: 编写强调道德和法律边界的系统提示,并明确告诉 Claude 如何拒绝。
应对屡次违规者: 调整响应,并考虑限制或封禁反复尝试绕过您应用程序防护措施的用户。例如,如果某个特定用户多次触发同一类型的拒绝(例如"输出被内容过滤策略阻止"),请告知该用户其行为违反了相关使用政策,并采取相应措施。
在此威胁模型中,您要保护您的用户免受嵌入在 Claude 代表他们读取的内容中的指令的影响:入站电子邮件的正文、获取的网页、上传文件的 OCR 输出,或工具调用的结果。能够影响该内容的攻击者可能会嵌入试图重定向 Claude 的指令。
构建您的应用程序结构,使 Claude 能够可靠地区分不受信任的内容和您的指令:
仅将不受信任的内容放在工具结果中。 将第三方内容通过 tool_result 块传递给 Claude,绝不要放在 system 提示或普通的用户 text 块中。Claude 经过训练,会对出现在工具结果中的指令保持适当的怀疑态度。有关 tool_result 格式,请参阅处理工具调用。
告诉 Claude 内容是什么以及来自哪里。 在工具的 description 中,或在结果本身的结构中,明确说明内容的性质和来源:例如,它是来自未知发件人的入站电子邮件正文,或是从用户上传的图像中提取的 OCR 文本。这种上下文有助于 Claude 校准对嵌入指令的信任程度。
在系统提示中声明策略。 明确告诉 Claude,从工具、文档或搜索返回的内容是不受信任的数据,绝不能覆盖系统提示或用户的原始请求。
对不受信任的内容进行 JSON 编码。 在可能的情况下,将第三方字符串包装在 JSON 对象中,而不是将它们拼接到自由格式的文本中。JSON 转义在不受信任的载荷和周围结构之间提供了明确的分隔符,因此攻击者无法通过闭合引号或标签来"逃逸"到指令上下文中。
不要将您自己的指令放在工具结果中。 由于 Claude 将工具结果内容视为不受信任的数据,您放在那里的指令可能会被忽略或被标记为潜在的注入。请在 tool_result 块之后的 user 轮次中发送您的指令。在支持的模型上,您还可以使用对话中途系统消息。
限制 Claude 对敏感数据和操作的访问。 应用最小权限原则,使成功的注入只能造成最小的损害:不要让 Claude 访问它不需要的机密信息,在沙盒环境中运行工具,并尽可能缩小权限范围。
在 Claude 对工具输出采取行动之前对其进行筛查。 将您用于用户输入的轻量级模型筛查模式同样应用于工具返回的内容。运行每个工具,将其原始输出传递给使用 Claude Haiku 4.5 的小型分类器调用,并且仅在筛查报告没有注入尝试时才将内容作为 tool_result 块返回。使用结构化输出,使分类器的判定成为您的应用程序可以据此分支的可解析值。
您还可以在将工具结果传递给 Claude 之前,对其应用上一节中的输入验证模式。
对您自己的代理进行红队测试。 在部署之前,使用故意包含注入尝试的文档、电子邮件和工具输出来测试您的工作流程,并确认 Claude 会忽略它们,以及您的筛查和确认步骤能够捕获其余部分。
定期分析输出以发现注入成功的迹象。利用这种监控来迭代优化您的提示、验证和过滤策略。
组合多种策略以实现稳健的保护。以下是一个包含工具使用的企业级示例:
通过分层应用这些策略,您可以建立针对越狱和提示注入的稳健防御,确保您由 Claude 驱动的应用程序保持最高的安全和合规标准。
Was this page helpful?