联盟程序页面如何控制Google Tag Manager注入的JavaScript脚本
Alice生产一款产品
- 她在此处展示产品信息:
alice.com/product-001 - 她设置了指向结账页面的
[立即购买]按钮。
Bob运营一项结账服务
- Alice采购了他的服务。
- Alice已在Bob的服务中配置了001号产品
- Bob的系统生成2个相关URL:
- 结账发起页:
bob.com/pay/product-001 - 感谢页:
bob.com/thank-you/product-001
- 结账发起页:
Charlie是该产品的联盟推广者
- Charlie拥有ID为
GTM-999999的Google Tag Manager容器 - Charlie与Alice、Bob约定其
affiliateId为777。 - Charlie希望在产品页、结账发起页、结账完成页3个页面跟踪销售漏斗,以优化推广预算。
- Alice和Bob均同意在URL中接收联盟ID参数。
- 若任意3个页面的URL后追加
?affiliateId=777,Alice和Bob将在页面加载GTM-999999标签,若页面已有自有GTM则同时加载。
这使得Charlie可以向页面发送“像素跟踪器”(*)。他可按需加载Facebook、Twitter、Google Analytics等平台的跟踪器,也可加载自行开发的任意“像素”。
(*) “像素”的名称来源于早年使用1x1透明图片做跟踪的时代,当前的跟踪器已不是图片,而是JavaScript脚本,功能更强大但也存在安全风险。
技术问题解答
1. Charlie是否可以任意注入JavaScript脚本执行恶意操作?
完全可以,你提到的窃取无HttpOnly标记的Cookie、修改页面内容、爬取DOM中渲染的用户邮箱等隐私信息、监听用户输入的表单内容等操作,Charlie都能实现。
加载第三方GTM容器的本质就是将当前页面的JavaScript执行权限完全开放给该容器的所有者,只要Charlie在自己的GTM-999999容器中配置自定义脚本,所有加载了该容器的页面都会自动执行他上传的任意代码,没有页面层面的执行限制。
2. GTM本身是否会对下发的脚本内容做过滤限制?
GTM默认不会对用户上传的脚本做实时内容拦截过滤,只有当脚本中存在Google明确标记的强违规特征(比如明显的钓鱼、盗号代码)时,才会事后封禁对应的GTM容器,不会阻止代码首次下发执行。如果Charlie对代码做简单的混淆处理,就可以轻松绕过Google的自动检测,正常下发恶意脚本到用户浏览器执行。
这种直接加载第三方联盟人员GTM容器的方案存在极高的安全风险,相当于将站点所有访问者的隐私和页面控制权直接交给第三方,不建议落地使用。
内容的提问来源于stack exchange,提问作者Xavi Montero
相关产品推荐
相关产品推荐

