跳转到内容
搜索文档

PII 检测

最后更新 查看 MarkdownAgent 设置

AI Security for Apps(原名 Firewall for AI)可以检测传入 LLM 提示中的个人身份信息(PII)。PII 检测有两种方法,您可以一起使用以实现分层防护:

  • 模糊检测(AI 驱动) — AI Security for Apps 使用 AI 模型识别提示内容中的常见 PII 类型。即使 PII 以自然语言或意外格式出现,此方法也能捕获。
  • 精确检测(正则表达式) — 您对原始请求正文编写带有正则表达式的 WAF 自定义规则。此方法非常适合具有已知、可预测格式的组织特定标识符。

模糊 PII 检测

启用 AI Security for Apps 且请求到达带有 cf-llm 标签的端点时,它会扫描提示中的 PII,并填充两个字段:

检测基于 Presidio,这是一个数据保护与去标识化 SDK。请参阅 cf.llm.prompt.pii_categories 字段参考 获取完整的已识别类别列表。

支持的 PII 类别

类别 描述
CREDIT_CARD 信用卡号
CRYPTO 加密货币钱包地址
DATE_TIME 日期或时间表达式
EMAIL_ADDRESS 电子邮箱地址
IBAN_CODE 国际银行账户号码
IP_ADDRESS IP 地址
NRP 国籍、宗教或政治群体
LOCATION 实际位置或地址
PERSON 人名
PHONE_NUMBER 电话号码
MEDICAL_LICENSE 医疗执照号码
URL URL
US_BANK_NUMBER 美国银行账户号码
US_DRIVER_LICENSE 美国驾照号码
US_ITIN 美国个人纳税人识别号
US_PASSPORT 美国护照号码
US_SSN 美国社会保障号
UK_NHS 英国国家医疗服务体系编号
UK_NINO 英国国家保险号
ES_NIF 西班牙税号
ES_NIE 西班牙外国人身份识别号
IT_FISCAL_CODE 意大利税号
IT_DRIVER_LICENSE 意大利驾照
IT_VAT_CODE 意大利增值税号
IT_PASSPORT 意大利护照号码
IT_IDENTITY_CARD 意大利身份证
PL_PESEL 波兰国家识别号
SG_NRIC_FIN 新加坡国民登记身份证 / 外国身份识别号
SG_UEN 新加坡唯一实体编号
AU_ABN 澳大利亚商业编号
AU_ACN 澳大利亚公司编号
AU_TFN 澳大利亚税号
AU_MEDICARE 澳大利亚 Medicare 编号
IN_PAN 印度永久账户号码
IN_AADHAAR 印度 Aadhaar 编号
IN_VEHICLE_REGISTRATION 印度车辆登记号码
IN_VOTER 印度选民身份证
IN_PASSPORT 印度护照号码
FI_PERSONAL_IDENTITY_CODE 芬兰个人身份代码

尽量具体以降低误报

当检测到任何 PII 类别时,cf.llm.prompt.pii_detected 字段会返回 true — 包括在正常对话中经常出现的 PERSONDATE_TIMELOCATION 等宽泛类别。仅基于此字段进行拦截,对大多数应用会产生较高的误报率。

相反,请针对 cf.llm.prompt.pii_categories 构建规则,并且只列出对您的用例重要的类别。例如,客户支持聊天机器人可能需要拦截信用卡号和 SSN,但可以安全地忽略人名和日期。从最窄的类别集开始,在 Security Analytics 中监控匹配项,并仅在需要时扩展。

示例规则 — 模糊检测

拦截任何包含 PII 的请求

  • 当传入请求匹配时

    字段 运算符
    LLM PII Detected equals True

    使用编辑器时的表达式:
    (cf.llm.prompt.pii_detected)

  • 操作Block

仅拦截特定 PII 类别

  • 当传入请求匹配时

    字段 运算符
    LLM PII Categories is in Credit Card

    使用编辑器时的表达式:
    (any(cf.llm.prompt.pii_categories[*] in {"CREDIT_CARD"}))

  • 操作Block

记录电子邮箱地址,但拦截信用卡和 SSN

创建两条自定义规则

  1. 一条操作设置为 Block 且表达式如下的规则:
    (any(cf.llm.prompt.pii_categories[*] in {"CREDIT_CARD" "US_SSN"}))

  2. 一条操作设置为 Log 且表达式如下的规则:
    (any(cf.llm.prompt.pii_categories[*] in {"EMAIL_ADDRESS"}))

精确 PII 检测(正则表达式)

如果您需要检测组织特有的自定义 PII 格式 — 例如内部员工 ID、病历号或专有账户标识符 — 可以创建对原始正文(http.request.body.raw 字段)使用正则表达式匹配的 WAF 自定义规则

此方法通过覆盖 AI 模型本身无法识别的格式,对模糊检测形成补充。

示例:检测员工 ID

在以下示例中,某组织使用的员工 ID 格式为 EMP- 后跟恰好六位数字(例如 EMP-482910)。

使用以下配置创建自定义规则

  • 当传入请求匹配时

    字段 运算符
    Raw request body matches regex EMP-[0-9]{6}

    使用编辑器时的表达式:
    (http.request.body.raw matches "EMP-[0-9]{6}")

  • 操作Block

  • 响应类型:Custom JSON

  • 响应正文{ "error": "Request blocked: employee ID detected in prompt." }

限定到特定端点

要将此规则仅限定到您的 LLM 端点,请将其与路径条件组合:

字段 运算符 逻辑
URI Path equals /api/chat And
Raw request body matches regex EMP-[0-9]{6}

使用编辑器时的表达式:
(http.request.uri.path eq "/api/chat" and http.request.body.raw matches "EMP-[0-9]{6}")

更多正则表达式示例

自定义 PII 类型 示例格式 正则表达式模式
员工 ID EMP-482910 EMP-[0-9]{6}
病历号 PAT/2024/00391 PAT/[0-9]{4}/[0-9]{5}
内部账户 ID ACCT-XX-99999 ACCT-[A-Z]{2}-[0-9]{5}
自定义 API 密钥前缀 sk_live_abc123... sk_live_[a-zA-Z0-9]{20,}

正则表达式规则注意事项

  • Cloudflare 计划要求。 正则表达式运算符(matches~)需要 Business 或 Enterprise 计划。
  • 正文大小限制。 http.request.body.raw 字段仅检查请求正文的有限部分。确切限制因计划而异
  • JSON 负载。 原始正文包含完整的 JSON 结构。您的正则表达式应考虑到提示文本嵌套在 JSON 字符串中的情况。
  • 性能。 复杂的正则表达式模式可能影响规则评估时间。请尽量使模式具体。

组合两种方法

您可以将模糊检测与精确检测一起使用,以实现分层防护:

(cf.llm.prompt.pii_detected or http.request.body.raw matches "EMP-[0-9]{6}")

此规则会拦截 AI 模型检测到任何内置 PII 类别,或正则表达式匹配到您的自定义标识符格式的请求。

这篇文档对您有帮助吗?