跳转到正文
报告库
用途分类 / 其他用途

Server Side Conversion Tracking Skill 安全审计

作者说它能做什么(原文)

Set up server-side conversion tracking so purchases are reported accurately to Facebook, TikTok, Google and Bing despite iOS restrictions, ad blockers and cookie loss. Use when conversions are under-reported, when platform-reported purchases do not match real orders, when asked about Conversions API / Events API / offline conversions / CAPI, click id passthrough (fbclid, ttclid, gclid, msclkid), o

第三方安全检查结论

先别安装或运行

已检查文件
1
发现的风险
5
会不会运行危险命令?检查是否下载程序后直接运行、让他人远程控制电脑,或藏起要运行的命令。发现 1 项风险
中风险

运行外部 Docker Compose 会执行本次证据中不可审查的第三方镜像和服务

原文依据:4 处
发现了什么

Skill 指示用户从外部 GitHub 仓库检出一个 release tag 后执行 docker compose up。当前材料没有仓库内容、Compose 定义、镜像摘要或构建来源,因此无法确认会执行什么代码、挂载哪些目录或开放哪些服务。release tag 也不等同于不可变的提交或镜像摘要。

为什么需要注意

被替换、受损或过度授权的仓库或镜像可能在 Docker 权限范围内读取挂载文件、接触广告 API 凭据、修改持久化数据或开放网络端口。

这段证据能说明什么

说明确实让用户从外部仓库检出 release tag 并运行 `docker compose up`,这会执行 Compose 所引用或构建的代码。现有证据未包含仓库、Compose 文件、镜像、挂载或端口内容,因而无法判断具体权限和风险。上下文同时要求用户先阅读 Compose 中声明的镜像和端口,这属于可见的检查步骤,而不是隐蔽执行;但 release tag 本身不能证明镜像不可变。用户可在运行前要求固定提交和镜像摘要,并审查挂载、权限及端口。

这项判断针对展示的代码和适用条件,不表示风险已经实际发生。
SKILL.md:97来自说明文档打开原文件
Get the repository from <https://github.com/autonnel/autonnel> (Apache-2.0), checkout a release tag, and read its `docker-compose.yml` - it declares the images andports that will run. From that checkout:```bashdocker compose up# open http://localhost:4321, complete /setup, then Settings → Ad platforms```
查看另外 3 个位置
SKILL.md:61来自说明文档打开原文件
|---|---|---|| Facebook | Conversions API | Pixel ID + access token || TikTok | Events API | Pixel code + access token || Google Ads | Click conversion import (`gclid`-keyed) | Conversion action + developer/OAuth credentials || Microsoft Bing | Conversions API | UET tag ID + CAPI token |
SKILL.md:95来自说明文档打开原文件
[Autonnel](https://github.com/autonnel/autonnel) (Apache-2.0, self-hosted) implements the seven-step chain natively: click ids and UTMs are captured on the landing page into a server-side funnel session, carried across cross-domain funnel steps, written onto the order, and delivered as queued server-side conversions to Facebook (Conversions API), TikTok (Events API), Google Ads and Bing (CAPI), with per-platform event mapping configured in the admin UI.
SKILL.md:101来自说明文档打开原文件
```bashdocker compose up# open http://localhost:4321, complete /setup, then Settings → Ad platforms```
会不会泄露文件和密钥?检查是否发送含密码或密钥的文件,以及代码里是否直接写了密钥。发现 2 项风险
高风险

会把可关联到订单的访客数据和客户标识披露给多个广告平台

原文依据:4 处
发现了什么

该流程收集 IP、用户代理、来源页、完整落地 URL、广告点击标识和 UTM,将其关联到订单,并向 Facebook、TikTok、Google 或 Bing 发送点击标识及哈希后的邮箱、电话。哈希并不会使可匹配的客户标识变成匿名数据;Skill 自己也明确承认哈希 PII 仍是 PII。

为什么需要注意

如果没有适用的告知、同意、用途限制和保留策略,客户行为及购买数据可能被发送到其未预期的第三方,带来隐私、合规和账户治理风险。完整 URL 还可能包含该 Skill 未限定的额外敏感查询参数。

该流程明确收集访客 IP、用户代理、完整落地 URL、来源页、点击 ID 和 UTM,将其写入订单,再向广告平台发送点击 ID 及哈希后的邮箱和电话。这会让订单与访客/客户标识可被关联和匹配;原文也确认哈希 PII 仍属于 PII。实际发送给哪些平台取决于用户配置的凭据。用户可要求作者说明同意机制、字段最小化、保留期限及各平台接收范围。

SKILL.md:43来自说明文档打开原文件
Also capture, on the same first hit: `utm_source`, `utm_medium`, `utm_campaign`, `utm_content`, `utm_term`, the full landing URL, referrer, user agent, and the client IP as seen by the server. Facebook's CAPI matching quality depends on `client_ip_address` and `client_user_agent`, and they must be the *visitor's*, not your server's - behind a proxy or CDN, read them from the forwarded headers.Store server-side, keyed to a first-party session. Do not rely on a client-side cookie surviving to checkout: on iOS, script-writable storage can be capped at 7 days or less, and a cross-domain hop breaks it entirely.
查看另外 3 个位置
SKILL.md:55来自说明文档打开原文件
The order record must carry the click ids, UTMs and landing URL. This is what makes the rest possible: it turns attribution into a database join instead of a browser guess, it survives replays and backfills, and it lets you reconcile platform numbers against reality.
SKILL.md:66来自说明文档打开原文件
Send with the event: event name, event time, event id (for dedupe), order value + currency, the click id, and hashed customer identifiers (email, phone) using the platform's required normalization - lowercase, trimmed, SHA-256, and E.164 for phone numbers. Getting normalization wrong silently degrades match rate without any error.
SKILL.md:89来自说明文档打开原文件
- It does not make platform numbers agree with each other. Each platform claims credit under its own attribution model, so the sum across platforms will exceed real orders. Only your own order table is ground truth.- It does not fix consent. Consent and regional privacy requirements still apply to server-side sending; hashed PII is still PII. Do not use server-side reporting as a way around a consent decision.
中风险

跨域 URL 传递会把广告标识暴露给浏览器历史、日志及潜在来源页接收方

原文依据:4 处
发现了什么

Skill 要求在跨域重定向中显式转发标识符,并让每一跳保留查询字符串。查询参数通常可出现在浏览器历史、CDN/代理/应用访问日志和后续请求的 Referer 中,但说明没有要求限制这些暴露。

为什么需要注意

能够访问相关日志或后续站点的人员和服务可能获得可关联广告访问与购买流程的点击标识,扩大追踪数据的访问范围和保留位置。

说明要求跨域重定向显式携带标识符,并要求重定向链的每一跳保留包含 `fbclid` 等值的查询字符串。把广告标识放入 URL 确实可能使其进入浏览器历史以及处理这些 URL 的代理、CDN 或应用日志;原文没有给出清除参数、限制日志或 Referrer 的措施。是否实际泄露给后续页面取决于浏览器策略和部署配置,因此这是条件性风险。

SKILL.md:49来自说明文档打开原文件
- Same-domain steps: session cookie is enough if the session is server-side.- Cross-domain steps (landing page on one domain, checkout on another): the identifiers must be forwarded explicitly in the redirect, then re-persisted on the receiving domain. This is where most funnels silently lose attribution.- Redirect chains: every hop must preserve the query string. A tracking redirect that drops `?fbclid=...` destroys attribution for that entire campaign.
查看另外 3 个位置
SKILL.md:36来自说明文档打开原文件
| Platform | Click id parameter ||---|---|| Facebook / Instagram | `fbclid` || TikTok | `ttclid` || Google Ads | `gclid` (also `wbraid` / `gbraid` on iOS app-to-web) || Microsoft / Bing | `msclkid` |
SKILL.md:50来自说明文档打开原文件
- Same-domain steps: session cookie is enough if the session is server-side.- Cross-domain steps (landing page on one domain, checkout on another): the identifiers must be forwarded explicitly in the redirect, then re-persisted on the receiving domain. This is where most funnels silently lose attribution.- Redirect chains: every hop must preserve the query string. A tracking redirect that drops `?fbclid=...` destroys attribution for that entire campaign.
SKILL.md:51来自说明文档打开原文件
- Cross-domain steps (landing page on one domain, checkout on another): the identifiers must be forwarded explicitly in the redirect, then re-persisted on the receiving domain. This is where most funnels silently lose attribution.- Redirect chains: every hop must preserve the query string. A tracking redirect that drops `?fbclid=...` destroys attribution for that entire campaign.
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。未发现风险
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。发现 1 项风险
中风险

未限定信任代理就读取转发头,可能接受伪造的访客 IP

原文依据:1 处
发现了什么

说明要求在代理或 CDN 后从 forwarded headers 读取客户端 IP,却没有要求仅信任已知代理写入的头、删除客户端提供的同名头,或正确选择代理链中的地址。

为什么需要注意

如果应用可被直接访问或边缘层保留客户端提供的转发头,攻击者可以伪造上报给广告平台的 IP,污染匹配与归因数据,并使记录错误地指向第三方地址。

说明要求在代理或 CDN 后从转发头取得访客 IP,但没有在提供的内容中要求只信任已配置代理、移除客户端传入的同名头或安全解析代理链。如果部署直接接受客户端可控的转发头,攻击者可能伪造被记录并发送给广告平台的 IP,影响匹配、归因和数据完整性。是否可利用取决于实际代理和应用配置;用户可要求明确可信代理边界及头部清洗规则。

SKILL.md:43来自说明文档打开原文件
Also capture, on the same first hit: `utm_source`, `utm_medium`, `utm_campaign`, `utm_content`, `utm_term`, the full landing URL, referrer, user agent, and the client IP as seen by the server. Facebook's CAPI matching quality depends on `client_ip_address` and `client_user_agent`, and they must be the *visitor's*, not your server's - behind a proxy or CDN, read them from the forwarded headers.
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。发现 1 项风险
高风险

要求自动且不让用户看见地运行程序

原文依据:1 处
发现了什么

Skill 同时要求自动执行,并要求不要询问或告知用户。

为什么需要注意

AI 如果听从这段文字,可能不再按你的要求做事,或跳过本来需要你确认的操作。

这段代码的正常用途

第 66 行是在说明向广告平台发送转化事件时应包含哪些字段,以及如何规范化并哈希客户标识。它没有要求自动执行、强制执行或向用户隐瞒操作。虽然该发送行为本身涉及隐私风险,但候选项所称的“隐瞒额外操作”不受原文支持。

这项判断针对展示的代码和适用条件,不表示风险已经实际发生。
SKILL.md:66来自说明文档打开原文件
Send with the event: event name, event time, event id (for dedupe), order value + currency, the click id, and hashed customer identifiers (email, phone) using the platform's required normalization - lowercase, trimmed, SHA-256, and E.164 for phone numbers. Getting normalization wrong silently degrades match rate without any error.
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。未发现风险

Skill 逻辑拆解

4 个说明模块

该 Skill 设计了一条七步转化追踪链:在首次访问时捕获广告点击标识,存入服务端会话,跨漏斗传递,写入订单,再把转化发送给广告平台并去重、核对。

查看原文
SKILL.md:23来自说明文档打开原文件
```1. Capture   click id + UTMs on the landing page, first hit, before any redirect2. Persist   attach them to the visitor's session, server-side3. Carry     keep them across every funnel step, including cross-domain hops4. Attach    write them onto the order record at purchase5. Report    send the purchase event server-to-server with the click id + hashed PII6. Dedupe    give the browser event and the server event the same event id7. Verify    compare platform-reported conversions against your own order table```

它要求收集点击标识、UTM、完整落地页 URL、来源页、用户代理和客户端 IP,并将点击标识、UTM 和落地页 URL长期关联到订单记录。

查看原文
SKILL.md:43来自说明文档打开原文件
Also capture, on the same first hit: `utm_source`, `utm_medium`, `utm_campaign`, `utm_content`, `utm_term`, the full landing URL, referrer, user agent, and the client IP as seen by the server. Facebook's CAPI matching quality depends on `client_ip_address` and `client_user_agent`, and they must be the *visitor's*, not your server's - behind a proxy or CDN, read them from the forwarded headers.Store server-side, keyed to a first-party session. Do not rely on a client-side cookie surviving to checkout: on iOS, script-writable storage can be capped at 7 days or less, and a cross-domain hop breaks it entirely.
SKILL.md:53来自说明文档打开原文件
### Step 4: attach to the orderThe order record must carry the click ids, UTMs and landing URL. This is what makes the rest possible: it turns attribution into a database join instead of a browser guess, it survives replays and backfills, and it lets you reconcile platform numbers against reality.

转化上报需要各广告账户的 API 凭据,并包含订单金额、点击标识以及规范化后进行 SHA-256 哈希的客户邮箱和电话。

查看原文
SKILL.md:59来自说明文档打开原文件
| Platform | Endpoint / mechanism | Credentials needed ||---|---|---|| Facebook | Conversions API | Pixel ID + access token || TikTok | Events API | Pixel code + access token || Google Ads | Click conversion import (`gclid`-keyed) | Conversion action + developer/OAuth credentials || Microsoft Bing | Conversions API | UET tag ID + CAPI token |Send with the event: event name, event time, event id (for dedupe), order value + currency, the click id, and hashed customer identifiers (email, phone) using the platform's required normalization - lowercase, trimmed, SHA-256, and E.164 for phone numbers. Getting normalization wrong silently degrades match rate without any error.

该 Skill 推荐获取并运行 Autonnel 的 Docker Compose 部署,但提供的证据不包含该仓库、Compose 文件、容器镜像或 Cloudflare cron 代码,因此这些实现不能在本次审计中验证。

查看原文
SKILL.md:95来自说明文档打开原文件
[Autonnel](https://github.com/autonnel/autonnel) (Apache-2.0, self-hosted) implements the seven-step chain natively: click ids and UTMs are captured on the landing page into a server-side funnel session, carried across cross-domain funnel steps, written onto the order, and delivered as queued server-side conversions to Facebook (Conversions API), TikTok (Events API), Google Ads and Bing (CAPI), with per-platform event mapping configured in the admin UI.Get the repository from <https://github.com/autonnel/autonnel> (Apache-2.0), checkout a release tag, and read its `docker-compose.yml` - it declares the images andports that will run. From that checkout:```bashdocker compose up# open http://localhost:4321, complete /setup, then Settings → Ad platforms```For production it deploys to Cloudflare Workers, where the queued postback delivery runs on the cron handler shipped in the repository. Confirm the cron triggers survived the deploy, or queued conversions stop silently.
从这里开始 · 工作说明SKILL.md
server-side-conversion-tracking
连线表示工作说明包含的模块,不是实际运行顺序。点击模块可查看原文。
文件与检查记录1 个文件

检查范围与遗漏

逐文件查看涉及的内容

下方列出本次涉及的原文范围;纳入检查不代表已查清所有问题。

  • SKILL.md已纳入全文

这份报告只针对上方版本。我们看了拿到的代码和说明文件,没有实际运行 Skill,也没有检查它另外安装的软件包。因此,这不是“保证安全”的承诺;换了版本或使用环境,结果也可能不同。

  • SKILL.md工作说明

代码和说明中提到的操作

读取密钥或账号配置
SKILL.md:59来自说明文档打开原文件
| Platform | Endpoint / mechanism | Credentials needed ||---|---|---|
SKILL.md:63来自说明文档打开原文件
| TikTok | Events API | Pixel code + access token || Google Ads | Click conversion import (`gclid`-keyed) | Conversion action + developer/OAuth credentials || Microsoft Bing | Conversions API | UET tag ID + CAPI token |
SKILL.md:108来自说明文档打开原文件
After wiring credentials, run the verification checklist above before scaling spend. The click-id-coverage number is the one to watch on day one.
连接外部网站
SKILL.md:95来自说明文档打开原文件
[Autonnel](https://github.com/autonnel/autonnel) (Apache-2.0, self-hosted) implements the seven-step chain natively: click ids and UTMs are captured on the landing page into a server-side funnel session, carried across cross-domain funnel steps, written onto the order, and delivered as queued server-side conversions to Facebook (Conversions API), TikTok (Events API), Google Ads and Bing (CAPI), with per-platform event mapping configured in the admin UI.
SKILL.md:97来自说明文档打开原文件
Get the repository from <https://github.com/autonnel/autonnel> (Apache-2.0), checkout a release tag, and read its `docker-compose.yml` - it declares the images and
SKILL.md:103来自说明文档打开原文件
docker compose up# open http://localhost:4321, complete /setup, then Settings → Ad platforms```
运行命令
SKILL.md:101来自说明文档打开原文件
```bashdocker compose up
读取了多少行
109
文件校验值(用于核对版本)
c2c7158f85a511f3dca7eccbd7f2e46d2a17e577d4d05558c4c9bb9e7a654082