互联网巨头们在测试接口中泄露的商业机密

2019 年 4 月 28 日 Python程序员

这是关于现代测试架构和方法系列文章的第一部分。第二部分可以在这里找到。

现今,多数大中型企业以用户为基础进行A/B测试和新功能的实验。这是检测某个功能能否长期有效并且获取变化影响的可观察指标的好方法。

我想探索一些大公司的测试方法,以及是否存在潜在的机密信息泄露。这些测试在实现时通常是独立的 - 由于近期单页应用程序的增长和关注点的分离,他们依靠前端或客户端来区分测试,而非在服务端进行这些操作。

实际上,这意味着许多公司都拥有定义其测试架构的私有API路由。用户通过客户端发送请求,服务端将予以回复,通常包含公司正在运行的所有测试的列表。下面将探讨一些最受欢迎的网站是如何做到这一点的。

Lyft

当您在Web客户端上登录Lyft时,其中的一个网络请求是https://www.lyft.com/api/experiments/configurations。

请求成功后,将返回180kb大小的JSON对象,其中包括正在运行的测试以及用户的当前状态。

Lyft测试路径

上图是返回结果,由于信息量巨大,我们先关注一些有趣的内容。

这里有两个关键点 - assignment和variables。每个分配似乎都带有测试 - 每个关键词都有一个预定义的组。大概内容如下:

  • Control

  • Static

  • Treatment

  • Variant_#(其中#代表接返回结果的变量)

此外,大量的测试都以Justin或Micha为前缀 - 我不确定这些是内部测试工具还是员工在测试前加上他们的名字。

尽管一些测试名称非常莫名其妙(exodus ETE test2: "control", MichaTntTest_e89f281d-53bb-4b2b-b1b9-f28a840bb75b: "treatment",并且EliuTest可能意味着什么),但是那些正常的名称可以让我们对Lyft当前正在研究的方向窥探一二。这些都是基于名称中的关键词推测的,但足够让我们做出一些推断。

  • PPTacticalPriceSFOV4 - SFO的战略定价 - 他们将定价与SFO区分开来。Airport在他们的测试名称中非常常见。

  • PXCPaxSREarlyArrival5minWaitFromAcceptV2值为"300s_from_accept" - 司机在接单后应该等待多长时间?

  • PXCPaxCancelFrictionAcceptanceEmpathy - 当取消乘坐时,他们可能改变措辞来修改用户行为,并降低取消率。

下一个关键词,variables,似乎是用户配置文件上的布尔设置。目前有61个(!!)类别的变量。 

它们表示乘客和司机的状态,并提供了很多关于Lyft认为你是什么的见解。一些关键词可以检查您是否被排除在某些促销活动之外,是否滥用系统,以及将您指定为Lyft员工/管理员/的布尔值。其中最为有趣的内容如下:

  • lastmile.enableIncentiveZones - 对我来说,不会使用这个功能。它可能表示司机常去的人口密集的地区,或者用于特殊用户的激励区。

  • lastmile.userLegacyMap - 他们使用不同的地图吗?他们可以从谷歌地图切换吗?

  • payments.allow_amex_on_fd - 基于其他关键词,fd表示第一个数据。这对我来说是错误的 - 也许他们没有首先显示美国运通,因为他们的交换费用更高,所以他们更喜欢乘客/司机使用Visa/万事达卡?

  • payment.intuitAffiliateCode - 对我来说,这个值是lyftplat18。也许这是intuit的促销码?现在是税收阶段,所以也许他们正准备在Intuit的TurboTax上建立合作伙伴关系?

  • pricing.tpa - TPA的全部款项,似乎代表“战术价格调整”; 他们清楚地意识到人们在Uber和Lyft之间的每次乘车对比,他们有不同的层级和价值观,可能只是勉强击败他们的竞争对手。

  • api.lnHasStrictEarlyCancelFee - 对我来说,不会使用这个功能。我猜测这是用来杜绝司机接单后,乘客又随意取消订单的行为。

  • cancels - 带有predictorEnabled关键词的“预测”的全部款项。例如,我的账号pxcPaxNoShowTa1kPredictor是0.52,pxcPaxNoShowTa1kPredictorBkn是0.66。这可能是某人没有出现的可能性?我通常非常尊重我的司机,但在他们出现之前几乎总是我需要的地方,所以我不确定0.52是52%还是衡量其他指标。

  • enterprise.businessRewardsMapBanner - Uber刚刚宣布了奖励措施。也许他们正在为某个商业版做准备,即当企业客户将它们用于乘车时会有奖励?

  • publicapi.ridetypes.courier.features.supportsWalking - Uber最近推出了“Express Pool”,您可以步行一小段距离以换取更便宜的价格。也许Lyft正在尝试相同的方法?

  • service.venues.snap_to_destination_vegas_enabled - 很多地点都提到了特定的地方。其中一个关键词是MacArthurBARTEnabled- 东湾的BART站之一!

  • ProjectX - 这是最有趣的关键字之一。我问了Lyft的一位朋友,他说这代表近期重构代码的名称!


Lyft的结尾似乎也很少清理或过滤 - 如下是variables中的部分代码:


总的来说,通过查看测试名称,我们可以收集到很多关于Lyft当前的策略信息。一个有趣的测试是设置像Burp Suite这样的变量并将其从false替换为true,反之亦然,看看你是否能够解锁应用程序中任何隐藏的面板。

以上内容不到测试总数的10% - 我邀请您在这里查看完整的内容,并且和我交流您的发现吧!

接下来我将从移动应用程序拦截这个测试,这将包括更多的信息,您可以在这里查看。

其中一个最有趣的内容:

  • vars.client.autonomous - Lyft似乎正在试验自动驾驶。例如console_far_stops由Lyft Level 5 HQ和Caltrain AV Stop组成,这似乎是Caltrain自动驾驶汽车站。

vars.client中有1,449个关键词 - 这并不包括variables中正在运行的162个测试,或holdout_variants中的44个。Lyft正在进行大量的测试!

您可以在此处查看所有信息并自己进行分析。

Airbnb

Airbnb的iOS应用程序发出请求https://api.airbnb.com/v2/mario_experiments?client=ios。

首先需要注意客户端有一个URL参数,请求成功后将返回一个大小约为33kb的JSON对象。如果切换为android版,返回的对象大小为44kb - 显然在Android上运行着更多测试。

返回结果的获取:iOS版Android版

Airbnb使用的测试框架似乎是Mario。每个测试用例都遵循相同的格式:

我们无需对上述内容进行猜测 - 对于每个测试,关键词都给出了明确的描述。

他们大多数的测试都围绕着推荐和支持。似乎没有什么暗示未来发展方向的内容 - 大部分是推荐的不同表达,不同的按钮位置以及聊天系统的各种变化。

Airbnb也对https://api.airbnb.com/v2/client_configs - 尽管这看起来没什么测试而更多的是普通的应用程序配置,但是也存在一些有趣的内容。

一些客户端配置如下:

其中又很多内容指向中国 - 似乎Airbnb目前的主要焦点是亚洲市场的扩张。

完整的客户端配置可以在这里找到。那里有大量的测试 - experiments_assignments类别中有923个。

应用程序的现有模块似乎有许多新的版本,例如"new_quick_pay","new_guest_inbox"和"new_verifications_profile_completion",其中很多还未处于“已启动”状态。

另外,我在Airbnb的工作区曾说“Google的软件工程师”- 但是现在改为“软件工程师(隐藏于Airbnb)”,并且如果我尝试让其再次说“Google”,HTTP PATCH 请求将回复:

他们不断地用“(由Airbnb隐藏)”取代“Google”- 我猜想这是他们试图阻止用户说出“谷歌我的名字直接和我联系以规避支付Airbnb的费用”,或者他们只是与谷歌有一些不和,想限制员工使用该应用程序。

Pinterest

Pinterest目前正在进行我见过的最全面的测试之一。在初始加载应用程序时,它会发出请求https://api.pinterest.com/v3/users/me/。它返回了完整的用户对象,以及gatekeeper_experiments。

完整的测试列表在这里目前活跃的有823个。其中一些有趣的内容如下:

  • ios_skin_tone_filter - 您现在可以通过肤色筛选化妆产品!

  • ios_use_cases_board_ideas_quiz - 在不同的板上测验?

  • activation_male_topic_image_replacement - 性别内容差异化?

Burp Suite拦截Pinterest API调用

Reddit

Reddit在过去的一年里一直进行巨大的改变 - reddit的重构对公司来说是一个很大的改变,他们的领导层似乎试图将reddit变成一个社交媒体应用程序。在加载应用程序时,它会请求https://gateway.reddit.com/redditmobile/1/ios/config。此配置包含当前启用的所有测试用例。完整的回复内容可以在这里找到。

他们目前有19个“桶”,每个都对应着相应的“测试”。

很多都与内容发现以及reddit推荐有关,例如best_of_community_carousel和trending_users_carousel。

这为他们推动基于用户和公司的关注,而不是特定的subreddits提供了信任。

Slack

Slack有大量的测试在进行。

加载应用程序后,将有3条请求路径。

  • https://slack.com/api/experiments.getEZFeatures

  • https://slack.com/api/experiments.getByUser

  • https://slack.com/api/experiments.getByVisitor 

它们都遵循类似的格式,如下所示:

其中很多都包含"trigger":"finished",这可能暗示测试结束。

一些有趣的内容如下:

  • stripe_l3_data

  • unified_autocomplete

  • ios_poseidon

  • monetization_no_flannel_login

Amazon

在启动Amazon iOS版本的应用程序后,会发出请求https://msh.amazon.com/mwl/assignments/v2 - 对于每个"Assignments"将返回一个对象。完整的内容可以在这里找到。

下面是一些有趣的内容。

亚马逊似乎在投资AR,可以在购物之前通过增强现实查看物品。

亚马逊根据你提供的照片创建照片集?

尽管其他测试看起来相当无趣,但是还有很多内容可以查看。

Tinder

由于用户态度的转变,约会类型的应用程序成为AB测试的一种有趣的选择。约会类型的应用程序或许比大多数的其他网站具有更深远的影响。

可惜的是,我没有看到任何类似Tinder幕后测试的内容。有很多功能标志,例如是否启用了Tinder Groups,是否启用了Tinder Places,或者你是否是"Tinder Elite"的成员,即为名人设计的Tinder计划。

虽然我无法找到Tinder的测试路径,但我确实想在此处提及。几个月前,Tinder取消了查看用户Ins的功能 - 您可以看到这些照片,但是无法链接到该账户。

事实证明他们并没有更新API - 此API仍会返回所匹配的Ins,因此还是可以由此获取相关信息。在网络客户端覆盖fetch来阻断所有匹配,并且通过Chrome插件来展示Ins看起来微不足道。

示例配置文件如下。

Facebook and Instagram

当然,我也想看看Facebook和Instagram的情况。可惜他们做了SSL Stapling - 任何Burp Suite证书替换的尝试都会失败,并且不会显示任何路由。然而,这并非绝对可靠 - 如果有越狱机,就可以显示各种配置而无视管理员设置了。

可惜的是我只有一个12.1.4版本的iPhone XS Max,它没有越狱。一旦实现越狱,我就可以通过替换iOS上默认的openssl实现来覆盖TLS Stapling。这样就可以查看所有采用SSL Stapling公司(如Snapchat,FB,Instagram等)的路由了。

总结

大多数公司没有模糊或最小化他们的测试名称,从而导致信息泄露。随着时间的推移,潜在的危机可能会浮出水面——如果一个公司正在缓慢地迭代一个新功能,它可能给竞争对手带来优势。

这在业内很常见 - 几乎每家公司都有用户增长策略部门,他们会隐匿测试路径。这使得弄清他们正在做什么,并在多数技术服务的蓝图上做出有根据的猜测变得有点困难。

我未来想测试的公司是Snapchat,Ebay,所有Google产品和服务以及Linkedin。

这种方法将用于更多的应用程序和服务。如果您有兴趣了解任何给定公司的测试方法,请随时与我们联系。

英文原文:https://blog.jonlu.ca/posts/experiments-and-growth-hacking?ref=hackernews 译者:我是昵称耶~

登录查看更多
0

相关内容

Airbnb zh.airbnb.com/? 成立于 2008 年 8 月,总部位于加利福尼亚州旧金山市。Airbnb 是一个值得信赖的社区型市场,在这里人们可以通过网站、手机或平板电脑发布、发掘和预订世界各地的独特房源。无论是想在公寓里住一个晚上,或在城堡里呆一个星期,又或在别墅住上一个月,都能以任何价位享受到 Airbnb 在全球 191 个国家的 34,000 多个城市为你带来的独一无二的住宿体验。

【实用书】流数据处理,Streaming Data,219页pdf
专知会员服务
76+阅读 · 2020年4月24日
【ICMR2020】持续健康状态接口事件检索
专知会员服务
17+阅读 · 2020年4月18日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
211+阅读 · 2020年2月21日
已删除
AI掘金志
7+阅读 · 2019年7月8日
渗透某德棋牌游戏
黑白之道
12+阅读 · 2019年5月17日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
15+阅读 · 2019年5月13日
阿里云发布机器学习平台PAI v3.0
雷锋网
12+阅读 · 2019年3月22日
Ceph的正确玩法之SSD作为HDD的缓存池
炼数成金订阅号
5+阅读 · 2019年2月14日
资源 | 适合AI新手的9款人工智能开源软件
AI100
3+阅读 · 2017年11月13日
这位程序员为什么要弃用Facebook?
CSDN
5+阅读 · 2017年7月14日
A Survey on Edge Intelligence
Arxiv
49+阅读 · 2020年3月26日
A Comprehensive Survey on Graph Neural Networks
Arxiv
13+阅读 · 2019年3月10日
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
Arxiv
7+阅读 · 2018年1月10日
VIP会员
相关VIP内容
相关资讯
已删除
AI掘金志
7+阅读 · 2019年7月8日
渗透某德棋牌游戏
黑白之道
12+阅读 · 2019年5月17日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
15+阅读 · 2019年5月13日
阿里云发布机器学习平台PAI v3.0
雷锋网
12+阅读 · 2019年3月22日
Ceph的正确玩法之SSD作为HDD的缓存池
炼数成金订阅号
5+阅读 · 2019年2月14日
资源 | 适合AI新手的9款人工智能开源软件
AI100
3+阅读 · 2017年11月13日
这位程序员为什么要弃用Facebook?
CSDN
5+阅读 · 2017年7月14日
相关论文
Top
微信扫码咨询专知VIP会员