广告联盟设计踩坑
一、背景及经过
现在市面上有一些广告联盟,运作方式是他们帮你引导用户,用户下单时返佣金给他们,这也是一些网站常用的推销方式。
最近一朋友公司也用这种方式推广,第一个月跑的好好的,第二个月发现数据猛增,差不多60%的订单都是广告联盟推荐过来的,当时就觉得有问题,然后通过一系列的分析发现,系统本身的设计有漏洞,这里抛砖引玉一下。
系统的设计流程如下:
假设朋友公司的网站是ab.com,则访问流程如下;
1、用户访问广告联盟的广告链接;
2、广告联盟将本身的标识将自己标识加在ab.com之后,类似 https://ab.com?adId=123;
3、ab.com将广告联盟标识即123写入cookie中,作用域为ab.com;
4、用户在ab.com上下单;
5、保存订单时,系统将123的广告联盟标识保存到订单中,以标识这个订单来自广告联盟的推荐。
其中2这一步有个中转页,即用户从广告联盟跳转过来的都到这个页面,这个页面只做一件事情,即确认是否来自广告联盟,如果是则将这个标识写入到cookie中。
问题就出现在这一步,经过我们分析日志,发现订单异常的那个月大量的来自广告联盟的链接的Referer都来自一个访问量比较大的社区,并且是以图片的形式访问!!
假设中转页的地址是 https://abc.om/ad/redirect,则广告联盟通过以下方式伪造图片:
<img src="https://abc.om/ad/redirect?adId=123"
然后联盟在社区发一个热门的帖子,帖子中插入上述图片,这样所有访问这个页面的用户,都会往ab.com写入cookie,这样只要这些用户再访问朋友的网站,则系统都认为是来自广告联盟的。
二、解决方案
问题的原因知道了,那怎么解决呢,既然后端写cookie不可靠,就由前端来写Cookie,即用户在访问 ab.com下的任何一个页面的时候,前端有个公共的js会检测url中是否有带上广告联盟标识,如果有,则将标识写入Cookie中,并且设置Cookie为httponly。
写在最后:
1、这次主要还是在数据上发现了问题,所以监控非常重要。
2、与第三方交互写敏感Cookie尽量由前端写,后端验证;
3、涉及到钱的场景最好是有安全测试;
- actionbar详解(二)
- actionbar完全解析(一)
- android galley实现画廊效果
- RavenDB:基于Windows/.NET平台的NoSQL数据库
- 神经网络算法交易:波动预测与定制损失函数
- 贝叶斯深度学习:桥接PyMC3和Lasagne构建层次神经网络
- How does it work in Mono's C# compiler?
- Cross-Origin Resource Sharing协议介绍
- 战斗民族开源神器ClickHouse:一款适合于构建量化回测研究系统的高性能列式数据库(二)
- Microsoft StreamInsight 构建物联网
- 利用 Microsoft StreamInsight 控制较大数据流
- HTML Agility Pack 搭配 ScrapySharp,彻底解除Html解析的痛苦
- 看看你是哪种级别的Python程序员(已跪)
- SignalR 在IE中无法工作 - Internet Explorer
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- TF入门05-实验过程管理
- [LeetCode]709. To Lower Case
- ISO C forbids comparison between pointer and integer [-fpermissive]
- 【疑难杂症】解决-TensorFlow “FutureWarning: Conversion of the”
- [Deep-Learning-with-Python] 文本序列中的深度学习
- TN-SCUI2020挑战赛详细讲解
- QSignalMapper使用以及替换方法
- 对于组件的可重用性,大佬给出来6个级别的见解,一起过目一下!
- 多个线程为了同个资源打起架来了,该如何让他们安分?
- 实战|记录一次渗透测试项目
- SVN工具分析
- 客服MM被投诉说下单耗时很长,老板下令必须控制在1秒以内
- 介绍两个刷 SQL 题的网站
- Spring MVC 你必须关注点
- 微信小程序开发实战(12):滑杆组件(slider)和form组件