Community研究与数据分析github.com

shannonmcgivney/consent-audit

审计网站或自动编码应用(Lovable、Bolt、v0、Replit、Next.js、React、纯HTML),检查在访问者同意Cookie横幅之前,是否有追踪代码加载或发送数据——广告像素(Meta、Google、TikTok、LinkedIn)、Google Tag Manager、分析工具、会话回放、聊天组件、嵌入内容、托管商注入的分析工具,以及客户邮件或ID发送给追踪器。只读操作——包括代码扫描和实时的全新访问网络检查,最终生成清单和最小修复列表。

consent-audit 是什么?

这是一个工程审计技能,用于检测网站或自动编码应用(如Lovable、Bolt、v0、Replit、Next.js等)在访问者尚未点击Cookie横幅“接受”按钮之前,是否已加载追踪代码或发送数据。该技能通过两个阶段执行审计:第一阶段对代码库进行静态扫描,识别追踪器、像素、分析脚本和嵌入内容,并检查是否存在同意检查;第二阶段对已发布网站进行实时无Cookie的全新访问网络请求检查,以发现横幅无法隐藏的追踪行为。审计涵盖广告像素、Google Tag Manager、分析工具、会话回放、聊天组件、托管商注入的分析(如Lovable的访客分析,默认开启),并检查请求是否携带用户标识符(如电子邮件、用户ID)。结果以证据为基础,分类为“必需”、“功能性嵌入”和“可选”追踪器,并提供最小修复列表。该技能适用于Claude Code,并明确声明为只读,不提供法律建议。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/shannonmcgivney/consent-before-tracking/tree/HEAD/skills/consent-audit

Installed? Explore more 研究与数据分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

同意审计:在任何人点击“接受”之前,什么在运行?

此项技能背后的启示(Dr. Erin Toussaint Jacques,Instragram Reel,2026年10月):自动编码的应用很容易被起诉,因为没人检查在访问者点击“接受”之前,追踪像素是否已经触发。像素是来自Meta、Google等公司的一段小代码,用于追踪用户在网站上的行为。根据加利福尼亚州的窃听法(CIPA),在获得同意之前开始的追踪可能被视为窃听,法定赔偿金最高可达每次违规5000美元,像素诉讼现已达数千起。拥有横幅和等待许可是两件不同的事情。 许多被起诉的网站都有横幅;追踪在页面打开的那一刻就已加载。

因此,本次审计用证据回答一个问题:在全新访问中,在任何人点击之前,加载了什么,发送了什么,发送给了谁?

这是一次工程审计,而非法律建议。切勿告诉任何人他们是“合规的”。报告应说明发现了什么、修复了什么、未检查什么,并建议如果用户投放广告或向欧盟或加利福尼亚州销售,应由律师审核。

默认:只读

不要对此技能做任何修改:不编辑、不发布、不更改数据库或认证、不添加新服务、不接受条款。修复工作由consent-gate负责,在所有者同意后进行。

步骤1:代码清单

如果代码在本地(或Lovable项目的GitHub克隆),运行扫描器:

python3 ~/.claude/skills/consent-audit/scripts/scan_trackers.py /path/to/app

它会列出在每个文件和行中找到的每个追踪器、像素、分析脚本、回放、嵌入和第三方脚本签名,标记似乎发送电子邮件或用户ID的行,并说明附近是否存在同意检查。标记为“附近有同意检查”的注释是一个线索,而非证据。阅读每个命中点周围的代码以确认:

  • 它从哪里开始。 index.html <head>、main.tsx、App.tsx、_app/layout或一个provider意味着它会在每个页面上为每个访问者运行。
  • 什么控制着它。 脚本标签、import或init()是否仅在存储了明确的肯定选择后才运行?一个隐藏自身但gtag('config')已经运行的横幅不是一个控制。
  • 它发送了什么。 identify(email)、setUser({ email })、Meta高级匹配(em、ph)、带有?查询字符串或#片段的完整URL(礼品码、重置令牌、搜索文本)以及表单字段。
  • 服务器端转发。 Conversions API、/api/track、向Meta/Google/Segment发送POST请求的边缘函数。这些必须尊重相同的选择。

如果没有本地代码(只能通过浏览器访问的Lovable项目),请使用该项目聊天中references/prompts.md内的仅审计提示,然后通过步骤2验证其报告。

步骤2:检查线上网站(横幅无法伪造的部分)

代码可能通过遗漏来撒谎(标签管理器、托管商附加组件、CMS片段)。始终在全新、无Cookie的浏览器标签页中检查已发布的URL:

  1. 在新无痕上下文中打开网站(在Claude内置浏览器中:清除存储后的新标签页,或之前未曾访问过的网站)。不要点击任何内容。
  2. 读取网络请求(read_network_requests)。在点击之前向广告、分析或回放域发出的任何请求都是一个发现:列出域、URL路径,以及是否携带标识符(fbp、_ga、cid、uid、em、ttp)。
  3. 通过javascript_tool读取Cookie和存储:document.cookie、Object.keys(localStorage)。注意任何_ga、_fbp、_gcl_au、_ttp、_hj*、ph_*、ajs_*、_clck或_uetsid。
  4. 点击拒绝(或如果没有拒绝选项则关闭横幅)。导航到另外两个页面。任何新触发的请求都是一个发现。
  5. 在新上下文中点击接受。确认追踪器现在已加载,以确保控制并非完全失效。
  6. 如果存在测试账户则登录(切勿使用真实客户的账户)。检查电子邮件或用户ID是否出现在任何追踪器请求中。

步骤3:检查托管和平台设置

由托管商注入的追踪器不会出现在应用的代码中:

  • Lovable: 项目 → 设置 → 访客分析。默认开启;在每个项目(包括新项目)上关闭它(或为其添加控制)。
  • Vercel(Web分析/速度洞察)、Netlify(分析)、Cloudflare(Web分析、Zaraz)、Framer/Webflow/Wix/Squarespace(网站设置 → 自定义代码/分析/像素)、EzyCourse / Systeme / Kajabi(追踪代码字段、Facebook像素字段)。
  • 标签管理器: 打开GTM容器并列出每个标签及其触发器。“所有页面”且没有同意条件意味着它在同意之前就会触发。

步骤4:分类并报告

对每个项目进行分类:

类别示例规则
必需登录会话、CSRF、购物车、结账页面的Stripe、欺诈/机器人检查、保存的UI偏好可在无同意的情况下运行。仅此一项不需要横幅。
功能性嵌入地图页面上的Mapbox、YouTube/Vimeo播放器、Calendly、聊天组件仅在使用的地方加载。优先使用点击加载或隐私模式(youtube-nocookie)。
可选广告像素、GA/GTM、PostHog、Hotjar、Clarity、HeyCatch、会话回放、重定向在访客选择该类别的选项之前,不得加载、获取或初始化。

报告格式(保持简短,以证据为基础):

同意审计:<app>(<url>),<日期>
在任何点击之前:<数量>个可选追踪器触发 → 通过/未通过

| 供应商 | 代码起点(文件:行或托管设置) | 在同意前触发? | 发送身份/URL数据? | 类别 | 最小修复 |

无需同意也可运行的必需服务:...
隐私声明:存在/缺失,页脚有链接?准确的供应商列表?
撤销选择:是否有持久的“隐私选择”链接?
全球隐私控制是否被遵守?是/否/未测试
发布也会同时发布的未发布更改:...
未检查:...
非法律建议。如果您投放广告、服务加利福尼亚/欧盟访客或在视频页面放置像素,请咨询法律顾问。

然后提供consent-gate以应用修复。如果某个追踪器没有带来价值,建议移除它而非为其添加控制:没有追踪器是最便宜的合规方式(在真实审计中,移除未使用的分析工具通常是全部修复方案)。

来自真实审计的注意事项

  • 分析工具从应用的入口文件(src/main.tsx)开始,在每个页面上为每个访问者运行,没有同意检查,并且登录代码在每次登录时将已登录客户的电子邮件和用户ID发送给分析工具。该工具无法剥离查询字符串,因此被完全移除。
  • Lovable的访客分析默认开启,由托管商注入。它不在代码中。
  • 发布操作会发布所有未发布的更改。 在发布隐私修复之前,列出它也将同时发布的较旧的未发布更改(登录辅助、依赖项升级、支付修复)并获得所有者的同意。
  • 关闭分析工具不等于关闭数据捕获。 应用自身的数据库(学生作品、进度、消息)是第一方且独立的。明确说明这一点,因为所有者会担心。
  • 视频页面 + Meta像素增加了另一项联邦风险(视频隐私保护法)。带有课程视频的网站应将任何此类页面上的像素视为高优先级处理。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相关技能