• YJ-Wu
    2025-07-11 来自伊朗
    「思考题」 1. 多轮对话用户 A 的隐私泄露给用户 B:可能的上下文管理问题? (1)会话隔离失败:不同用户会话共用同一 KV 缓存区域或上下文池,导致 A 的内容被 B 读取。 (2)上下文未及时清理:用户 A 对话结束后缓存未清除,接着被 B 的对话继续使用。 (3)缓存归属识别错误:上下文存储缺乏用户/会话标签或索引不准确,导致会话数据混用。 2. RAG 在降低幻觉上有效,但要设计哪些安全“护栏”? (1)知识库污染防护:仅信任可信源(白名单),并对新内容进行自动/人工审计,过滤不良或恶意信息. (2)间接提示注入检测:检索结果可能包含隐藏指令,应提前扫描检索到的信息,阻止“间接 prompt injection” (3)结果来源与可信度标注:生成内容时附带信息来源和可信度评分,让用户可以溯源判断。 (4)访问权限控制:RAG 检索的内容需符合权限边界,避免暴露敏感数据或被用于欺骗。 3. Function Call 场景中,最怕出现的安全漏洞是什么? (1)最关键的风险:越权执行 / Jailbreak Function 调用 (2)攻击者通过构造 prompt 和参数,使模型执行未经授权的函数调用,例如读取敏感数据、修改数据或执行敏感操作。
    展开

    作者回复: 你好,感谢你的认真作答! 你的回答非常细致,显然是带着思考去写的,这本身就体现出了对于本课程的高度投入,但是我也想借此机会指出几点仍然需要继续打磨的地方:思考题1的情况,本质上是身份隔离失败,同时状态管理也有缺陷造成的。你回答的“(1)会话隔离失败”是对的,但是从解释来看,还可以更加深入。企业级应用,通常不会将“不同用户会话共用同一KV缓存区域或上下文池,导致A的内容被B读取”,因为如果真的这么做了,就不仅是“设计缺陷”的问题了,而是非常容易会导致生产环境的“一级系统事故”了。通常更常见的真实成因,往往是没有正确使用用户token、session_id或者是trace_id进行缓存区分,从而导致用户B的请求“错误地”加载了用户A的上下文内容。无论是从排错,还是从建设安全性防御的角度来看,都建议你往“请求路径隔离”和“多租户状态隔离”这两个方向再深挖一下。你回答的第“(2)上下文未及时清理”,在逻辑上也能成立的。但是,更准确的说法是,这种风险往往不是“对话结束后缓存未清除”,而是某些平台采用了“上下文拼接机制”(比如拼接最近几轮历史)来节省成本,如果拼接逻辑中,对多用户的归属判断不准确,就会出现“历史上下文错配”的问题。因此,从工程视角来看,核心问题不在于“清理不及时”,而在于“上下文管理策略设计不当”。“(3)缓存归属识别错误”,这个描述非常准确。除了上述三点以外,还可能有“调试机制暴露风险”,也就是企业要么无意,要么有意为了快速迭代,会将模型在上线环境中保留调试模式(debug=true),这就可能被攻击者利用,进行信息探测或是泄露。 思考题2,可能还有一个“内容更新及撤回机制”的需求,需要补充。就是知识库应该具备版本更新,或者是失效标记的机制,否则就会出现“陈旧知识”,比如文档已被下架或者是更正,这往往会引起大模型依旧引用的幻觉。 思考题3,是希望可以首先理解到Function Call是LLM的“能力外接”的一种机制,安全风险来自模型对调用指令的“自然语言生成 -> 代码调用”的过程失控,最具破坏性的就是越权函数执行(Unauthorized Execution),因此Function Call通常在企业安全中都会带有审计机制,也就是如果没有调用之前的人工审批或是策略检查层,那么就可能造成静默执行风险。 非常高兴看到你已经具备相当深度的安全意识与技术判断力,欢迎持续交流,期待你在后续课程继续给出更多精彩反馈!

    
    