Compare · 横评对比
garak vs Presidio:安全测试与敏感信息脱敏分别解决什么问题?
garak 用于风险行为测试,Presidio 用于敏感信息识别和处理,两者可以组合。先分别验证数据处理和完整应用,再核对权限与复核结果。
| 维度 | garak | presidio |
|---|---|---|
| 主要任务 | 指定输入下的风险行为测试 | 识别与处理敏感信息 |
| 主要输入 | 目标配置与测试输入 | 文本、实体、语言与识别器配置 |
| 主要结果 | 响应、检测与扫描报告 | 识别位置、类别及处理后文本 |
| 运行位置 | 开发、验收与回归 | 数据处理管线及其验证 |
| 软件许可 | Apache-2.0 | MIT |
| 授权边界 | 不代替可信身份与后端权限 | 不能用遮盖代替数据访问控制 |
简短结论
要检查模型或应用在测试输入下是否出现不希望的行为,用 garak 这样的测试工具;要在文本进入或离开模型时识别并处理敏感信息,评估 Presidio。它们可以配合使用,但不能互相替代:扫描结果不会自动形成在线脱敏措施,脱敏成功也不能证明系统不存在其他风险。
本文比较的是安全测试和数据处理的职责,不是两款相同扫描器的排名。资料核对日期为 2026-10-22,没有运行两者共同中文检出率或速度基准,也没有向真实客户系统发起扫描。
核心差异速览
| 维度 | garak | Presidio |
|---|---|---|
| 主要问题 | 指定输入下是否出现风险行为 | 哪些敏感信息需要识别和处理 |
| 典型输入 | 测试输入与目标配置 | 文本与实体、语言、识别器配置 |
| 典型结果 | 响应、检测结果与扫描报告 | 实体位置、类别、分数及处理后文本 |
| 放置位置 | 开发、验收与回归测试 | 数据处理管线及其验证环节 |
| 重点限制 | 覆盖与检测器均有限 | 识别存在误报漏报,依赖配置 |
| 权限边界 | 不能替代后端授权 | 不能用遮盖代替数据访问控制 |
garak 适合做什么
对于自有聊天应用,先定义测试目标和风险范围,再通过探针调用目标,检查响应是否包含需要调查的行为。结果应能回到具体输入、输出、版本和判定依据,方便人工复核和修复后回归。
如果某个测试出现了不该展示的信息,需要判断来源:基础模型已有内容、检索器拿错记录、后端权限漏检,还是日志或工具返回了额外数据。仅靠响应中的一个模式命中,通常无法完成根因分析。
同样,未命中不代表没有泄漏。探针可能没触达业务路径,响应可能换了一种表达,检测器也可能不理解中文或特定格式。把测试范围和不适用项写清,比一个没有分母解释的通过率更可靠。
Presidio 适合做什么
Presidio 主要由敏感信息识别与匿名化等组件构成,可按实体、语言、规则和模型配置处理文本。它适合在数据流中检查邮箱、电话号码或自定义行业标识等内容,并采取遮盖、替换等处理方式。
使用前应准备有标注的数据,包含应识别与应保留的样本。识别出某种实体不是结束,还要检查位置是否正确、重叠实体如何处理、处理后的文本是否仍满足业务需要。对中文、混合语言和非标准格式应单独评价。
Presidio 当前文档已从旧的 Microsoft GitHub Pages 地址跳转到新的项目文档域名,本文引用此次实际可访问的文档。具体组件版本和模型仍应固定,避免文档更新后继续凭旧配置判断支持范围。
用合成数据把两者组合起来
可以先建立一组虚构联系人和虚构订单,明确哪些字段允许进入模型、哪些需要替换。先独立验证 Presidio 的识别与处理,再把处理后的文本接入模型。最后对完整应用做授权范围内的风险测试,观察是否存在未经过预处理的数据入口或旁路输出。
记录至少包括原始合成样本编号、处理策略版本、目标版本、测试输入、响应和人工结论。不要把真实客户资料当作“更真实的测试素材”复制到报告。需要使用真实数据时,按已有权限和必要性设计受控流程。
当 garak 报告疑似泄漏时,定位是识别器漏报、应用没有使用处理后的文本,还是工具返回绕开了管线。修复后分别跑识别测试和完整应用测试,避免只改一条检测规则让报告变绿。
为什么脱敏不能替代授权
假设用户 A 请求了用户 B 的订单。即使输出中姓名和手机号被遮盖,订单状态、消费信息或业务事实仍可能不应返回。正确做法是后端拒绝不允许的数据访问,输出处理只是附加措施。
租户 ID、用户 ID 和授权状态应来自可信服务端上下文。把它们放在模型提示词里,并不让模型成为可靠的权限系统。数据库过滤、工具可调用范围、审批和实际执行都需要独立控制及测试。
涉及发邮件、退款或删除记录时,也不能把模型的“已检查”当成授权。测试环境应隔离真实副作用,必要的审批逻辑应在代码或业务服务里执行,且在回归里验证不能被跳过。
价格与维护成本
garak 开源代码采用 Apache-2.0,Presidio 开源代码采用 MIT,软件许可费可为 $0。目标模型、用于测试或判定的模型、NLP 资源、运行主机、日志和维护仍需要预算。不要把一个本地正则识别例子的成本套到所有多语言或外部服务配置。
garak 的调用量取决于探针输入、生成数量、动态行为、重试和检测方式。Presidio 的成本取决于具体组件、语言模型、吞吐和部署方式。把两者放到同一完整数据流中,分别计量,再判断哪一环最值得优化。
本文没有测量共同吞吐,也没有企业套餐报价。中国大陆网络、权重下载、外部服务地区与账户条件,需在真实部署环境确认。选择本地处理时,也要核查日志、监控或其他组件是否把原文发往外部。
如何看懂 PASS、FAIL 和识别分数
garak 的判定受当前检测器和阈值约束。始终通过的测试检测器会让一个空输出示例显示通过,这只能检查流程;真实探针的命中也要人工核验。接口错误、超时、空响应和跳过应单列,不能统一当作安全样本。
Presidio 的识别分数同样不能当成没有隐私风险的概率。提高阈值可能减少误报却增加漏报,降低阈值可能遮盖正常业务文字。应按目标实体、语言和风险成本选择阈值,并保留漏报样本。
两个工具的数字不在同一口径上。更好的联合指标是:敏感字段的识别与处理是否符合预期,完整应用是否仍可能泄漏,以及正常功能是否被过度破坏。出现严重失败时单独报告,不用大量普通通过样本把它平均掉。
该怎么选
如果你还没有数据处理策略,先用合成样本建立 Presidio 的识别与处理验证;如果应用已接好流程,需要检查是否存在绕过路径,再加入 garak 的有限测试。很多团队需要的是两种能力各自达到可解释的验收标准,而不是从中选一个名字。
要搭建首个可复现扫描,见 garak 教程;要了解更完整任务评估,见 garak vs Inspect AI;整体选型见 LLM 安全测试工具推荐。
官方资料
结论
garak 用于风险行为测试,Presidio 用于敏感信息识别和处理,两者可以组合。先分别验证数据处理和完整应用,再核对权限与复核结果。
常见问题
- Presidio 是通用漏洞扫描器吗?
- 不是。其识别和匿名化组件用于数据处理,不能覆盖全部模型或应用风险。
- 用了脱敏就不会越权吗?
- 不能这样保证。遮盖部分字段仍可能返回不应访问的业务事实,授权应由后端控制。
- 两者可以组合吗?
- 可以先独立验证敏感信息处理,再对授权范围内的完整应用测试旁路和实际响应。
- 中文场景需要额外验证吗?
- 需要。语言、行业格式、识别器和检测器均影响误报漏报,应使用相应标注和业务案例。
- 识别分数和扫描分数能直接比较吗?
- 不能。它们的对象与统计口径不同,也不能当作没有风险的概率。
- 为什么要保护扫描报告?
- 报告可能包含原始输入、敏感响应和配置,应限定权限并在分享前检查内容。