andykear/FileMaker-XML-scrubber
GitHub: andykear/FileMaker-XML-scrubber
一个基于浏览器的本地脱敏工具,用于在将 FileMaker XML 分享给 AI 工具前清除其中的 API 密钥、密码和内部主机名等敏感凭据。
Stars: 1 | Forks: 0
# FileMaker XML Scrubber
[](https://github.com/andykear/FileMaker-XML-scrubber)
[](https://creativecommons.org/licenses/by/4.0/)
一个基于浏览器的单文件工具,可以在您将 FileMaker XML 分享给 AI 工具或其他开发者之前,清除其中的凭据值。所有操作均在浏览器本地运行,不会向任何地方上传任何内容。
由 Clockwork Creative Technology 的 Andrew Kear 创建,并公开分享给 FileMaker/Claris 社区。
## 这能解决什么问题?
当您将 FileMaker 脚本 XML 或 DDR 导出内容粘贴到 ChatGPT、Claude、Gemini 或任何其他 AI 工具时,您可能会面临泄露嵌入在计算和配置中的 API key、密码、OAuth token、私钥和内部主机名的风险。
该工具会在保留逻辑的同时自动对这些内容进行脱敏,以便您仍然可以获取帮助。
## 处理前
```
$authPayload
```
## 处理后
```
$authPayload
```
key 和内部主机名已消失。而 Let() 块、拼接操作、变量名以及步骤结构均保持完好。AI 工具仍然能够读取其逻辑并为您提供帮助。
## 清除内容
### 已知的 key 和 secret 格式
这些格式的误报率几乎为零,因此会在所有位置(包括注释内部)进行匹配。整个字符串字面量都会被替换。
- **OpenAI** API key(`sk-`、`sk-proj-`)
- **Anthropic** API key(`sk-ant-`)
- **Google** AI key(`AIza`)
- **xAI** key(`xai-`)
- **Groq** key(`gsk_`)
- **AWS** 访问密钥 ID(`AKIA`、`ASIA`)
- **GitHub** token(`ghp_`、`gho_`、`ghu_`、`ghs_`、`ghr_`、`github_pat_`)
- **Slack** token(`xoxb-`、`xoxp-`、`xoxa-`、`xoxr-`、`xoxs-`)
- **Stripe** key(`sk_live_`、`rk_live_`、`sk_test_`、`rk_test_`)
- **SendGrid** API key(`SG.xxxx.xxxx`)
- **PEM 和 SSH 私钥**(`-----BEGIN ... PRIVATE KEY-----`),包括拆分在多个拼接字面量中的密钥
- 用于 Slack、Discord 和 Microsoft Teams 的**传入 webhook URL**(URL 本身携带了 auth token)
### 上下文脱敏
这些取决于值所在的位置或其命名方式,因此仅在注释块外部进行匹配。
- **Configure AI Account** 步骤值(步骤 ID 212),完全脱敏
- **Set Variable** 步骤(步骤 ID 141),其名称与凭据关键字匹配:单个字面量将被整体替换,表达式中的每个字面量都会被脱敏
- 计算内部的**内联关键字赋值**,例如 `apikey = "value"`,包括没有 `$` 前缀的 Let() 局部变量
- 涵盖的**凭据关键字**:api key、token、bearer、password、secret、SMTP pass 或 key、private key、auth key、SSH key、SFTP pass、passphrase、credential、OAuth
- **连接字符串密码**(DSN 和连接属性中的 `password=` 和 `pwd=`)
- **Azure 存储 key**:连接字符串中的 `AccountKey=` 和 `SharedAccessSignature=` 片段,保留 endpoint 和账户名作为上下文
- **插件许可证 key**:`MBS("Register"; ...)` 的字面量参数以及任何 `*_Register(...)` 激活调用,并保留 MBS 选择器
- **传递给 MBS 的 SFTP/CURL 凭据**,例如 `MBS("CURL.SetOptionPassword"; ...)`、`CURL.SetOptionUserName` 和 `CURL.SetOptionXOAuth2Bearer`。这些将凭据作为位置参数传递,而不是 `keyword = "value"`,因此普通的关键字匹配无法识别它们,而且普通的密码也没有基于值的扫描能够捕获的形状。工具处理了以下三种情况:
- 字面量参数会被原位脱敏
- 变量参数(常见情况)会通过同一脚本自身的步骤列表向前追踪到赋予其值的最近的 `Set Variable`,并在其源头(而非使用位置)对值进行脱敏
- 字段引用(`Table::Password`)无需脱敏,因为其值存在于您的数据中而不是该文件内,因此会被标记以供人工审查
该追踪仅限于当前脚本。由调用脚本设置的变量,或在其他位置设置的全局 `$$variable`,将显示为未解析状态,而不会被默默忽略。
- **内部主机名和私有 IP**,替换为 `[HOST]`。公开 URL 将保持原样
- 名称与凭据关键字匹配的**属性**
## 不清除的内容
这是一个启发式清除工具,并非绝对保证。它无法捕获以下内容:
- 账户名和权限集名
- 内部文件路径和文件名
- 密码字段以外的 ESS 和 ODBC 数据源名称
- 电子邮件地址和 SMTP 服务器名称
- 值列表内容、schema 名称、字段名或任何与凭据形状不匹配的敏感字面量
- 通过在*调用*脚本中设置的变量,或在文件其他位置设置的全局 `$$variable` 传递的凭据。SFTP/CURL 追踪仅遵循当前脚本自身的步骤;其范围之外的任何内容都将被标记为未解析,而不是被脱敏
即使不使用此工具,FileMaker XML 导出也会暴露大量结构。在分享之前,请务必检查输出内容。
## 适用范围
- DDR XML 导出
- 另存为 XML(完整的数据库设计报告)
- 脚本 XML(剪贴板粘贴格式,fmxmlsnippet)
- 自定义函数 XML
支持处理 UTF-8 和 UTF-16 编码的文件。格式错误的 CDATA 部分(在计算文本包含 `]]>` 的 FileMaker 导出中很常见)会在解析前自动修复。
## 隐私
文件完全在浏览器中使用 DOM 进行解析、扫描和脱敏。没有网络调用、没有上传、没有分析统计。您可以从本地副本离线运行它。
## 用法
1. 在任何现代浏览器中打开 `filemaker-xml-scrubber.html`
2. 拖放文件或单击选择一个文件
3. 查看发现的结果
4. 下载脱敏副本或将其复制到剪贴板
如果您需要调整处于活动状态的模式或添加自定义关键字,可以在展开面板后面找到检测设置。
## 关于输出
计算保留在 CDATA 内部,因此运算符不会被重新转义为实体。如果没有匹配项,则原样返回原始文本。该输出旨在用于分享和审查。它不能保证 100% 安全,因此在发布前请务必进行检查。
## 配套工具
[FileMaker XML Inspector](https://github.com/andykear/FileMaker-XML-inspector-open-source) — 分析您的 FileMaker XML 导出
[FileMaker Script XML Skill](https://github.com/andykear/FileMaker-XMLsnippet-Claude-Skill) — 使用 Claude 生成可直接粘贴的脚本 XML
[FileMaker Layout XML Skill](https://github.com/andykear/FileMaker-XMLsnippet-Layout-Claude-Skill) — 使用 Claude 生成可直接粘贴的布局 XML
[FileMaker Field Definitions XML Skill](https://github.com/andykear/FileMaker-XML-field-definitions) — 使用 Claude 生成可直接粘贴的字段定义
## 许可证
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) — 免费使用、分享和改编,但需注明出处。
按“原样”提供,不提供任何担保。该工具可能会漏掉某些值,或者脱敏程度超出您的预期。在分享输出内容之前,您有责任对其进行检查。
v1.2 · [Clockwork Creative Technology](https://www.clockworkct.co.uk)
标签:ChatGPT辅助工具, FileMaker, XML, 后端开发, 多模态安全, 数据可视化, 数据脱敏, 网络安全, 隐私保护, 静态网页