如何防止用户 Prompt 攻击?
未标记
考查重点:输入可信度与执行权限。用户文本不能改变服务端身份与权限;提示分层、数据隔离配执行校验,限制外传和副作用,用攻击样例回归
本题目录
参考答案
核心回答
防用户Prompt攻击需要把模型指令层级、服务端权限和敏感数据边界一起设计。系统提示中说明用户内容不具备更高权限,输入与检索内容按不可信数据处理;真正的数据访问、工具执行和资金等操作由服务端独立授权。过滤器与模型拒绝可以降低风险,但不能把一句“忽略恶意指令”当成完整防护。
防止System Prompt泄露时,首先不要把密钥、口令或必须保密的业务凭证放进提示词。提示本身也应尽量减少内部细节;即便出现内容泄露,系统仍应靠权限与隔离控制实际损害。
先明确攻击会跨越哪条边界
直接注入是用户把自己的请求伪装成更高优先级指令,试图覆盖角色、泄露内部内容或绕过流程。间接注入则藏在网页、附件、知识库和工具返回中,模型读材料时可能把其中的指令当成授权。
攻击文本是否包含“忽略前文”只是表面特征;还要覆盖角色伪造、编码变换、多轮诱导、跨语言及通过工具反馈逐步改变目标等情况。正常用户讨论安全问题或引用攻击样本,也不应自动被当成攻击执行。
分层落地措施
提示与上下文组织:区分系统策略、用户任务和引用材料,保留来源与角色边界,明确外部内容只作为证据。分隔符和结构化字段有帮助,但不能单靠标记保证模型不会误解;长会话中仍要维护同一权限与目标。
工具与数据授权:模型只能提出工具调用,后端校验工具白名单、参数Schema、资源范围、用户身份及租户权限。数据库查询、网络访问与文件操作使用最小权限;敏感动作需要业务要求的确认或审批。不要让模型通过提示自行给自己提权。
输入、输出与运行监控:检测异常输入及外部内容,必要时限制上下文、隔离处理或拒绝;输出检查敏感信息、越权参数与明显违规结果。限制调用次数、token、执行时间和可访问目标,留下可审计记录,便于终止与回溯。
怎样测试防护
建立正常任务与攻击样本两组回归:系统提示提取、越权数据访问、恶意工具参数、知识库夹带指令和多轮诱导。重点检查是否真的访问或执行了不该发生的动作,而不是只看模型回复是否“拒绝”。同时观察正常任务成功率和误拦截,防止用完全禁用能力换取表面安全。
例如用户要求客服助手读取另一个租户的工单,即使模型输出了查询参数,服务端也应按用户身份限定租户并拒绝越权。系统提示、输出检测与独立授权形成多道约束,最后一道不能交给同一个被注入的模型自行判断。
对应教程
- AI智能体与大模型应用开发面试题库:理解不可信输入与工具权限,本文展开泄露、越权和回归验证。
参考资料
- 国内:JavaGuide:LLM/Agent安全实战:借鉴用户输入、系统策略与工具权限的分层思路,解释正文中提示约束与服务端独立授权为何需要配合。
- 国内:WeThinkIn:Agent安全评测与AgentOps:参考工具越权与敏感信息泄露的攻击面,确定正文中权限、输出检查及运行监控的防护对象。
- 国内:zero2Agent:工具调用基础:把参数校验和授权放在服务端,限制模型提议的动作。
- 国外:OWASP:LLM Prompt Injection Prevention Cheat Sheet:依据提示注入防护与测试方法,组织正文中的内容边界、攻击回归和正常任务误拦截检查。
- 国外:Greshake等 / Saarland、CISPA等:Not what you have signed up for:通过外部内容成为注入入口的机制,说明为什么防护不能只检查用户直接输入。
