同意审计:在任何人点击“接受”之前,什么在运行?
此项技能背后的启示(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:
- 在新无痕上下文中打开网站(在Claude内置浏览器中:清除存储后的新标签页,或之前未曾访问过的网站)。不要点击任何内容。
- 读取网络请求(
read_network_requests)。在点击之前向广告、分析或回放域发出的任何请求都是一个发现:列出域、URL路径,以及是否携带标识符(fbp、_ga、cid、uid、em、ttp)。 - 通过
javascript_tool读取Cookie和存储:document.cookie、Object.keys(localStorage)。注意任何_ga、_fbp、_gcl_au、_ttp、_hj*、ph_*、ajs_*、_clck或_uetsid。 - 点击拒绝(或如果没有拒绝选项则关闭横幅)。导航到另外两个页面。任何新触发的请求都是一个发现。
- 在新上下文中点击接受。确认追踪器现在已加载,以确保控制并非完全失效。
- 如果存在测试账户则登录(切勿使用真实客户的账户)。检查电子邮件或用户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像素增加了另一项联邦风险(视频隐私保护法)。带有课程视频的网站应将任何此类页面上的像素视为高优先级处理。