提示注入防护:工具权限不能交给检索文本决定
网页或文档里可能夹带“忽略规则并执行操作”的文字。模型读到这些内容,并不意味着系统应把它们当成用户授权。
问题从哪里出现
网页或文档里可能夹带“忽略规则并执行操作”的文字。模型读到这些内容,并不意味着系统应把它们当成用户授权。
理解核心机制
把检索内容作为不可信数据,工具调用在模型之外经过确定性的权限检查。下面的演示只允许一个读取工具,并将它绑定到显式授权;它说明边界位置,不是完整防注入系统。
动手做一个小实验
Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。
allowed_tools = {"read_public_note"}
def authorize(call, granted):
return call.get("name") in allowed_tools and call.get("name") in granted
assert authorize({"name": "read_public_note"}, {"read_public_note"})
assert not authorize({"name": "delete_file"}, {"read_public_note"})
assert not authorize({"name": "read_public_note"}, set())
print("tool authorization checked outside model output")适用边界与常见误区
允许的读取工具仍可能通过路径、查询或返回内容泄露信息,因此参数和结果也需要约束。提示词分隔符、关键词过滤或单次模型审查都不是完备防线。
继续练习
设计文档指令尝试越权、读取无权限对象和诱导外传三类测试,确认模型输出无法绕过工具层的检查。