企业知识问答的越权风险,不能用“页面上看不到敏感文档”来证明已经安全。真正需要验证的是:用户的身份、组织关系和业务权限,是否在知识入库、检索、答案生成和日志展示的每个环节持续生效。只要后台检索曾经返回未授权内容,即使最终答案没有直接显示原文,也可能通过摘要、引用、关键词或回答上下文造成泄露。
先建立可验证的权限边界
测试前应整理一份权限矩阵,至少明确用户角色、可访问资料、禁止访问资料,以及文档的部门、业务域、密级、负责人和有效期。测试对象不能只选完整文档,还应覆盖同一文件中的受限附件、章节或知识片段,因为文档级权限未必能处理混合授权场景。
测试问题应围绕同一知识点设计多组提问:直接询问敏感内容、使用口语或同义表达、要求跨文档汇总、询问文档名称和版本,以及故意请求当前用户无权访问的资料。还要分别观察普通用户、部门用户、项目成员和管理员的返回结果,避免只验证一个账号。
检查检索链路,而不只是最终答案
权限过滤应在关键词检索和向量检索之前或其中生效,而不是等模型生成答案后再删除敏感内容。验证时应检查:
- 未授权文档是否进入候选结果;
- 搜索建议、摘要和引用是否暴露敏感信息;
- 模型是否会根据多份授权范围不同的资料进行越权拼接;
- 用户权限变化后,旧的索引和缓存是否仍可返回原内容;
- 无权访问的问题是否得到清晰拒绝,而不是通过模糊回答泄露线索。
特别要测试“间接泄露”。例如系统不展示合同正文,却透露合同名称、适用部门、条款结论或版本信息,仍可能构成权限失效。
用证据和日志完成复核
每次测试都应记录用户身份、时间、问题、命中文档、权限判断、最终引用和回答结果。若发现异常,需要区分是权限映射错误、检索过滤缺失、缓存残留,还是模型基于上下文进行了不当推断。只有保留完整链路,才能定位问题并复测修复效果。
越权验证不应是上线前的一次性检查。组织调整、临时授权、文档更新和权限回收后,都应重新验证。企业知识问答的安全标准不是“模型没有主动泄密”,而是未经授权的内容从检索开始就不应进入用户可利用的知识范围。
