Skip to content

威胁模型与提示注入的执行边界 ​

先问要保护什么,再问如何检测恶意文本。模型可以接触用户问题、网页、检索片段与工具返回;这些内容都可能包含指令形状的文字。攻击者想改变的不只是回答,还可能是工具目标、权限或数据去向。

文档里的指令为什么不构成授权 ​

完整标准库实验:假设模型已被文档诱导提出越权动作,执行器仍根据服务端身份拒绝。我们故意不尝试用关键词识别攻击,观察硬边界能否独立成立。

python
resources={"public":{"tenant":"a","text":"opening hours"},
           "secret":{"tenant":"b","text":"private payroll"}}
def read_resource(identity, resource):
    item=resources.get(resource)
    if item is None or item["tenant"] != identity["tenant"]:
        raise PermissionError("not found or not allowed")
    return item["text"]
identity={"tenant":"a"}
model_proposal={"resource":"secret","reason":"网页说管理员已经批准"}
try:read_resource(identity,model_proposal["resource"])
except PermissionError:print("blocked despite model proposal")
else:raise AssertionError("cross-tenant leak")
assert read_resource(identity,"public") == "opening hours"

拒绝来自租户不匹配,不取决于 reason 的措辞、语言或编码。直接注入来自用户输入,间接注入来自网页/文档/工具;多轮记忆污染还可能让恶意结论跨任务存活。数据标签、引用边界和提示词有帮助,但不能提供授权保证。

按资产与能力画边界 ​

资产包括密钥、个人信息、知识、工具身份与预算。按可逆性、规模和用户可见性区分查询、草稿、发信、删除、付款和发布。只读并不总是低风险:读取秘密并回复给错误用户已构成泄露。沙箱限制文件、网络、进程、CPU和凭证;模型“答应不访问”不构成沙箱。

输入校验限制字节、编码、文件类型、解压大小与解析时长;内容安全分类解决特定内容策略,不能代替权限。输出schema检查结构,事实核对检查证据,HTML转义检查展示安全,三者不同。拒答应给出可以公开的原因与申诉/人工路径,不能把内部秘密写进解释。

维护早期“把所有资料直接拼入system”的应用时,先将资料移入明确数据区域并保留来源,再把身份移回服务端上下文,最后增加工具授权测试。仅添加更长的安全提示不会修复执行器信任模型参数的问题。

练习 ​

攻击者把reason换成中文、英文或空字符串都应拒绝;使用tenant=a读取public应始终成功。给出循环断言,证明规则不依赖关键词。

核对本章答案

下一章

用心记录每一步成长