错敏信息检测
v1.0.1通过调用UCAP安全接口,检测文本或网页内容中的多种敏感信息,支持智能静态和动态抓取模式,保障数据合规。
敏感信息检测 Skill
name: 错敏信息检测 description: 通过调用 UCAP 平台的安全防护接口,快速识别文本内容中的敏感数据。
简介
这是一个用于检测文本敏感信息的 Skill,通过调用 UCAP 平台的安全防护接口,快速识别文本内容中的敏感数据,适用于内容审核、数据合规等场景。
本技能支持从 URL 获取网页内容进行检测。
⚠️ 重要安全配置说明
URL 抓取(静态模式 · 默认):
- 默认使用静态模式:安全可靠,无需浏览器依赖
- 使用 requests 抓取静态 HTML
⚠️ 动态模式需要显式启用:
- 设置
DISABLE_JAVASCRIPT = False可开启动态模式- 必须配置
ALLOWED_DOMAINS白名单,否则动态模式直接拒绝访问- 页面 JS 可能发起内网请求(SSRF 风险),白名单是唯一防护手段
userKey 存储:
- 仅保存在当前进程环境变量,不持久化到磁盘
- 如需长期使用,请在系统中配置持久化的
UCAP_USERKEY环境变量
功能特性
- 支持多种敏感类型检测(可自定义检测类型列表)
- 支持从网页 URL 获取内容进行检测
- 静态模式(默认):使用 requests 抓取静态 HTML,安全高效,无需浏览器依赖
- 增强型 SSRF 防护:DNS 解析 IP 检查、私有网段屏蔽、云元数据地址屏蔽、重定向二次校验
- 动态模式(可选):使用 agent-browser + Chrome 渲染 SPA(如需启用,请配置白名单)
- 强制 HTTPS:默认仅允许 HTTPS 协议
- userKey 仅保存在当前进程,不持久化到磁盘
- 标准化的 JSON 格式输入输出
- 完善的错误处理和超时机制
- 兼容 OpenClaw 对话式调用
安全说明
SSRF 防护(静态模式 / 默认)
| 防护层次 | 说明 |
|---|---|
| 协议校验 | 默认仅允许 HTTPS,拒绝 http / ftp / file 等协议 |
| 主机名预检 | 拒绝直接以私有 IP 写入的 URL |
| DNS 解析后 IP 检查 | 对域名进行 DNS 解析,检查所有 IP 是否为私有/保留网段 |
| 云元数据屏蔽 | 屏蔽 169.254.169.254、metadata.google.internal 等云平台元数据地址 |
| 重定向后校验 | 对页面最终落地 URL 重新执行完整安全检查 |
⚠️ 动态模式安全风险(需要显式启用 + 强制白名单)
动态模式(DISABLE_JAVASCRIPT = False)需要同时满足两个条件才能使用:
- 显式启用:代码中设置
DISABLE_JAVASCRIPT = False - 强制配置
ALLOWED_DOMAINS白名单:未配置则动态模式直接拒绝访问
不配置白名单的风险:
| 风险 | 说明 |
|---|---|
| 页面 JS 内网请求 | 恶意网页可能包含 fetch("http://192.168.1.1/admin") 等代码 |
| SSRF 绕过 | 虽然目标 URL 安全检查通过,但 JS 可能发起其他内网请求 |
动态模式安全配置示例:
DISABLE_JAVASCRIPT = False # ⚠️ 需要显式启用
ALLOWED_DOMAINS = [
"news.example.com",
"blog.trusted-site.cn",
"*.github.io",
]
受屏蔽的私有/保留 IP 网段
| 网段 | 说明 |
|---|---|
| 10.0.0.0/8 | RFC1918 私有地址 |
| 172.16.0.0/12 | RFC1918 私有地址 |
| 192.168.0.0/16 | RFC1918 私有地址 |
| 127.0.0.0/8 | Loopback |
| 169.254.0.0/16 | Link-local / AWS 元数据 |
| 100.64.0.0/10 | RFC6598 共享地址 |
| 0.0.0.0/8 、240.0.0.0/4 等 | 保留地址 |
| ::1/128、fc00::/7、fe80::/10 | IPv6 私有/链路本地 |
域名白名单配置(动态模式强制要求)
⚠️ 动态模式必须配置白名单,静态模式无需配置
# 动态模式:必须配置白名单(否则无法使用动态模式)
DISABLE_JAVASCRIPT = False
ALLOWED_DOMAINS = [
"example.com",
"*.trusted-domain.com",
]
# 静态模式(默认):无需配置,保持 ALLOWED_DOMAINS = [] 即可
# 注意:智能模式(DISABLE_JAVASCRIPT=False)在静态模式失败时,
# 如果未配置白名单,将不会切换到动态模式,而是返回错误
JavaScript 执行控制
# 默认 True:仅使用静态模式
# - 始终使用 requests 抓取静态 HTML
# - 安全高效,无需浏览器依赖
# - 适合大多数网页内容抓取
DISABLE_JAVASCRIPT = True
# 设为 False:智能模式
# - 先尝试静态模式(requests),安全高效
# - 静态抓取失败或内容为空时,自动切换动态模式(agent-browser)
# - ⚠️ 动态模式需要配置 ALLOWED_DOMAINS 白名单!
DISABLE_JAVASCRIPT = False
SSL/TLS 安全
- 默认启用 SSL 证书验证
- 遇到证书问题时返回友好错误提示
技术实现
使用的技术栈
| 技术 | 用途 |
|---|---|
| Python 3.8+ | 主要开发语言 |
| requests | HTTP 请求库(静态模式 / API 调用) |
| beautifulsoup4 | HTML 解析(静态模式下提取标题) |
| dnspython | DNS 解析(SSRF 防护) |
依赖安装
pip install -r requirements.txt
或单独安装:
pip install requests>=2.31.0
pip install dnspython>=2.4.0
pip install beautifulsoup4>=4.12.0
⚠️ 动态模式附加依赖
如需启用动态模式(DISABLE_JAVASCRIPT = False),还需安装:
| 依赖 | 安装命令 | 说明 |
|---|---|---|
| Node.js | - | agent-browser 运行的基础环境 |
| agent-browser | npm install -g agent-browser | 命令行浏览器控制工具 |
| Chrome/Firefox | - | agent-browser 自动控制,需提前安装 |
⚠️ 注意:动态模式需要额外的系统依赖(Node.js + agent-browser + Chrome),且必须配置 ALLOWED_DOMAINS 白名单。
使用方法
对话式调用
请帮我检测这段文本是否包含敏感信息:{待检测文本内容}
或从 URL 检测:
请帮我检测这个网页的内容:https://example.com
userKey 配置
userKey 为可选参数:
| 配置方式 | 体验限制 | 说明 |
|---|---|---|
| 不传入 userKey | 体验用户,每周 10 次 调用 | 无需注册 |
| 传入 userKey | 无调用限制 | 需前往 UCAP 平台申请 |
⚠️ userKey 存储说明:
- 仅保存在当前进程环境变量,不会持久化到磁盘
- 进程结束后自动失效
- 如需长期使用,请在系统中配置持久化的
UCAP_USERKEY环境变量 - 新会话首次使用需重新传入 userKey
# 示例 1:体验使用(无需密钥,每周 10 次)
请帮我检测这段文本是否包含敏感信息:{待检测文本}
# 示例 2:传入 userKey(解除调用限制)
请帮我检测并设置密钥:您的userKey
如需更换密钥,重新传入新的 userKey 即可覆盖。
参数说明
| 参数名 | 类型 | 必传 | 说明 |
|---|---|---|---|
| content | string | 是 | 待检测的文本内容 或 URL |
| userKey | string | 否 | UCAP 平台用户密钥(可选,不传则为体验用户;仅保存在当前进程) |
| sensitive_code_list | array | 否 | 检测类型列表,不传则检测所有类型 |
返回格式
{
"code": 0,
"message": "检测成功",
"data": {
// UCAP 接口返回的检测结果
},
"source_url": "https://example.com",
"source_type": "url"
}
错误码说明
通用错误码
| 错误码 | 说明 |
|---|---|
| 0 | 检测成功 |
| -1 | 待检测文本不能为空 |
API 调用错误
| 错误码 | 说明 |
|---|---|
| -3 | 接口调用超时(15秒) |
| -4 | 接口返回错误 |
| -5 | 网络连接失败 |
| -6 | 接口调用失败 |
| -7 | 接口返回非 JSON 格式数据 |
| -8 | SSL 证书验证失败 |
URL 访问错误
| 错误码 | 说明 |
|---|---|
| -100 | URL 安全检查失败(私有 IP / DNS 重绑定 / 非白名单域名 / 重定向后不安全 / 动态模式未配置白名单) |
| -101 | 访问超时 |
| -103 | agent-browser 错误(仅动态模式,需要确保已安装) |
| -104 | 访问失败(其他错误) |
示例代码
from main import check_sensitive, fetch_url_content, run, validate_url_security
# 安全校验(不实际抓取)
ok, msg = validate_url_security("https://example.com")
print(ok, msg)
# URL 抓取(静态模式,默认行为)
result = fetch_url_content("https://example.com")
# 传入 userKey(解除体验限制)
result = check_sensitive(
content="这是一段待检测的文本内容",
userKey="your_user_key_here"
)
# 自动识别 URL 或文本
result = run({
"content": "这是一段待检测的文本内容",
"userKey": "your_user_key_here"
})
注意事项
- 使用前需要获取有效的 UCAP 平台 userKey(可选,体验用户每周 10 次)
- 接口调用超时时间为 15 秒
- 网页加载超时时间为 30 秒
- 所有 URL 请求均经过 SSRF 安全校验
- 默认使用静态模式:安全高效,无需浏览器依赖
- 如需启用动态模式,设置
DISABLE_JAVASCRIPT = False并配置ALLOWED_DOMAINS白名单 - userKey 仅保存在当前进程,不会持久化到磁盘
申请 userKey
访问 https://safeguard.ucap.com.cn/ 申请专属 userKey
Version tags
latest
