前几天和原来的同学聊天,同学之前一直都是做跨境电商的,最近开始做起了Tiktok。他之前没做过兴趣电商,也不了解这个怎么做,就问问我能不能帮忙在上面弄点数据下来,他来研究研究。正好我也想看看TK的系统是怎么设计的,一拍即合,我就接下了这个活。大概的需求就是通过商家后台去爬取一些达人客户还有订单的数据和自动上架一些产品。
# 调研
# 认证
TK的认证和所有的HTTP服务都一样,都是采用SessionID (opens new window)进行认证的,简单来说SessionID就是用户的钥匙,只要从Cookie中把SessionID弄出来就可以拿到用户的所有权限了。
# 反爬及反作弊
TK作为一个全球化的平台,在反作弊和反爬上面确实做了很多事情。
类似于在HTTP请求中的参数
msToken: 请求令牌,也会用来统计请求,不同的终端上面生成的msToken算法不一致,所以TK可以根据msToken来判断一个终端是否请求过多,如果一个终端请求过多,那就可以推测是爬虫了。同理如果终端过多也可以判断用户的账户出现异常行为既反作弊。
X-Bogus: 一种防数据包伪造的一个参数, 又称为x伪造, 主要用于反爬虫。在实际的验证中发现浏览器中会自动构造这个参数, 但自己写程序的话, 不发送这个参数也是可以成功的。目前不确定这个参数之后会不会触发TK的风控。
Signature: signature是签名, 主要是防止数据传输的过程中, "中间人"对数据进行串改。签名一般都是公钥加密, 私钥验签。但在实际验证的过程中也会发现浏览器中会自动构造这个参数, 但同样自己写程序的话, 不发送这个参数也是可以成功。
# 接口
接口于所有的HTTP服务也一样, 只要注意好参数, 就可以正常使用了。
# 指纹浏览器
通过这个活,意外的了解到国内的电商都会使用指纹浏览器,指纹浏览器的作用就是用来保证跨境电商的IP还有浏览器指纹(RFC 5646: Tags for Identifying Languages (opens new window), RFC 7231: Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content (opens new window))一样。避免出现IP变动频繁, 浏览器指纹变动触发反作弊。 可以推测电商平台都会使用各种终端识别码来检测商家, 比如msToken频繁变动就有可能触发电商平台的风控策略。
# 方案
# 浏览器插件
最理想的方案就是采用浏览器插件, 利用浏览器同源的特性及Tiktok现有的代码, 这样既能保证和指纹浏览器一样的IP及指纹, 又可以保证msToken不会乱变, 还能简化X-Bogus及Signature的生成, 发出去的请求和用户的请求完全一致。 还不需要朋友把SessionID给过来, 避免中间人攻击 (opens new window)及Session泄露 (opens new window)。
# 独立程序
通过调研发现msToken随机生成, X-Bogus和Signature忽略的情况下也可以访问接口进行数据的爬取及上架产品, 对于独立程序来说要模拟X-Bogus和Signature也是可行的, 只是难度较大, 且由于TK算法黑盒的特性很难保证完全一致, 出现不一致的情况反而更容易触发风控。另外由于SessionID会定期变动, 所以需要朋友周期性的复制SessionID到程序中。
# 实现
最终和朋友聊完决定怎么简单怎么搞, 因为朋友说他是资料店, 风控的问题不是那么重要, 所以最后就采用了独立程序的方案。
确定方案之后, 实现就相对比较简单了, 朋友也不怎么在乎 UI, 就搞了一个比较简单的 UI, 把接口怼上去就完了。每次朋友用Cookie Editor把Session ID从浏览器里面复制出来就可以执行了。
# 总结
TK作为一个比较新的电商平台, 有做很多反爬及反作弊的设计, 但是没有真正的使用起来。听朋友说像亚马逊的风控就很严格, 类似于MsToken随便乱变, X-Bogus和Signature不检测这种问题是不可能存在的, 亚马逊发现IP和指纹不一样就有可能触发风控了。 所以本质上还是业务主导了技术, 在业务面前技术也就没那么重要了。但是业务上来了技术肯定也会跟上去。说不定哪天TK就开始风控起来了呢? 到时候估计又得换实现方式了。