如何阻止FB Pixel Purchase事件被虚假购买恶意触发?
FB Pixel购买事件恶意触发解决方案
恶意触发代码说明
用户通过地址栏注入的触发代码如下:
javascript:(function(){ var codigo = document.getElementById("ProductJson-product-template"); if(codigo == undefined){ content_id = meta["product"]["id"]; } else { var content_id = JSON.parse(codigo.text)["id"].toString(); } fbq('track', 'Purchase', { content_type: 'product_group', content_ids: '[' + content_id + ']' , value: 99.00, num_items: 1, currency: 'USD', }); console.log("O pixel de PUR foi ativado com sucesso para o content ID: " + content_id); })();
核心问题本质
用户通过地址栏执行的JavaScript代码运行在站点的同域上下文下,可直接调用全局暴露的fbq方法触发事件,本质是前端上报的转化事件缺乏校验机制导致的可伪造问题。
可用解决方案
- 最优方案:后端调用转化API上报购买事件
直接弃用前端的Purchase事件上报逻辑,改为用户支付成功后,由服务端调用Facebook Conversion API上报购买数据。该方案完全绕过前端执行环境,用户本地执行的任何JS都无法伪造上报请求,是最可靠的防护手段。 - 重写
fbq方法增加校验逻辑
在FB Pixel初始化代码之后、任何业务上报逻辑执行前,重写全局fbq函数,对Purchase事件增加专属校验:- 后端生成一次性有效、和用户会话绑定的
purchase_token,仅在用户真实支付成功后才下发到前端 - 重写逻辑参考:
恶意脚本没有办法获取到仅支付成功页面才会下发的有效token,触发的Purchase事件会被直接拦截。// 先保存原生fbq方法 const originalFbq = window.fbq; // 你后端生成的合法token,仅支付成功页面会注入有效数值,其他页面可设为空 const validPurchaseToken = '后端注入的专属token'; window.fbq = function(...args) { // 仅校验Purchase事件 if (args[0] === 'track' && args[1] === 'Purchase') { const eventParams = args[2] || {}; // 没有带约定的token、或者token不合法直接拦截 if (!eventParams.purchase_token || eventParams.purchase_token !== validPurchaseToken) { return; } } // 合法事件继续执行原生逻辑 originalFbq.apply(window, args); } - 后端生成一次性有效、和用户会话绑定的
- 限制事件触发场景
- 仅在支付成功的回调页(感谢页)加载Purchase事件相关的上报逻辑,商品详情、购物车等非转化页面全局拦截Purchase事件的上报
- 增加行为校验:比如用户进入站点后短时间内(比如小于3秒)触发的Purchase事件直接判定为恶意请求拦截,真实用户从浏览到支付完成必然需要更长的操作流程
- 数据层对账校正
给上报的Purchase事件增加自定义参数(比如你自身系统的订单号),定期将Facebook后台收到的转化事件和你的订单系统数据对账,把没有对应真实订单的无效事件标记为无效,提交给Facebook做数据校正,减少数据失真的影响。
内容的提问来源于stack exchange,提问作者Geovanne S.
相关产品推荐
相关产品推荐

