再看API设计——从黑客的角度 | TW洞见

今日洞见

文章作者、部分图片来自ThoughtWorks:贺思聪。

本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布/发表。已经本网协议授权的媒体、网站,在使用时必须注明"内容来源:ThoughtWorks洞见",并指定原文链接,违者本网将依法追究责任。

互联网的高速发展以及多终端设备的广泛使用使得前后端分离架构变成了必须,越来越多的网络应用暴露出API以便于前端的使用,RESTFul API的设计成为了业界主流的设计范式。在持续的业务增长以及后端技术的革新中,微服务架构(Microservice)崭露头角,解决了单体应用(Monolithic Application)的诸多问题而越来越流行。现在,在客户端与服务、服务与服务之间,有更多的数据通过常用的json等结构化的方式进行交互。这些交互过程在单体应用中对外并不可见,但在微服务架构下对于却变得透明,黑客可以通过窥探及猜测系统内部的结构,会比以前更容易攻击系统。在这篇文章中,我将以一个数据黑客的角度,展示如何利用API来大规模的获取所要的信息。

数据黑客

数据黑客没有一个准确的定义,在我看来这帮人对于数据具有敏锐的嗅觉;他们尝试得到一切能够获得的数据并进行数据分析;他们尝试在数据的云海中找出规律以便预测未来。在程序员拯救世界的今天,数据黑客则掌握了世界的未来。

在若干年前,前后端分离的架构还尚未普及,很多数据的呈现方式都是直接在页面中打印出来,为了解析数据,数据黑客们使用XPATH去解析数据,将数据装入数据库进行分析,甚至从中赚钱。如今,我们有着大量的API供使用,数据变得唾手可得。我们不用再去繁琐的解析易变的HTML,只需要访问一个URL即可获得我们需要的数据。

10天内获得自由职业网站8百万项目数据

我对自由职业充满了好奇,想试一下自由职业是怎么接到活的。在Freelancer网站上,几乎每分钟都有新的项目发布,一般一分钟之内就有好几个投标信息(bid)。每个投标信息包含了投标的内容、价格以及完成时间,然后雇主根据这些信息来筛选谁可能接这个项目。一般来讲会在交谈之后,明确所有的事宜后,再将项目分配给自由职业者。

作为自由职业者,我们可以看到其他人投标的价格以及别人的信誉度、别人做过的项目等信息,但不能看到具体的投标内容。作为雇主,价格、自由职业者的信誉度、是否通过一些测试可能都是影响雇主是否第一轮筛选进行交谈。那么,通过数据分析,能否回答以下几个问题以便帮助我们正确的投标:

  • 针对投标信息,雇主对自由职业者的信誉度和价格,哪个看得更重?
  • 针对澳洲的雇主,我如何能够增加我被选中的几率,是通过降低价格还是提升自己的质量?

为了回答这些问题,我需要尽快的将网站上所有可能拿到的信息都拿下来进行分析。

网站及API分析

打开一个项目页面(注:你需要翻墙),你会看到页面如图所示:

简单的看一下HTML后,发现网站将所有的信息都内嵌到HTML中的一个script中,在浏览器执行完成后会得到project变量。这个变量包含了项目的所有信息,所以理论上讲,我们拿到一个HTML然后解析Javascript,是可以得到我们需要的数据的。

但这种方式也存在一些问题,一来是解析HTML非常费事,二来是执行Javascript也比较繁琐。并且没有一个办法能够遍历所有的项目,可行性并不大。

通常来讲,我不会去解析主网站,因为其防范一般比较严。但很多网站的马奇诺防线在移动端就失效了,Freelancer也不例外。

打开移动端的网页。简单看一下可以知道它是基于AngularJS写的网站。

通过分析API的请求,可以很快的看到API的样子:

我们来分析一下这个URL,红色部分代表了这个项目的简写名字,将其改为其他的项目名称以后能够得到对应的信息。

理论上我只要得到所有项目的简写名字,再用这个地址就可以获得所有的信息了。但且慢,我注意到了投标信息的API:

红色部分用的是一串数字,如果你了解RESTFul API,则很容易知道这个bids的信息是属于9844976项目的。将之前的projects后面的名字变为数字,果然返回ID为9844976的项目的信息,和用简写名字同样的效果。这样的话我就确定了网站每个项目的ID是可以直接访问的,从0开始遍历这个ID即可得到所有网站的信息。

阻力:API访问速度限制

当爬到1000个左右的时候,网站就报告API Rate Limit限制了,大概需要一个小时左右才能再次访问。作为一个大型的网站,API访问速度限制是很平常的事情。如果照这个速度访问,则爬完所有的信息需要将近一年。能不能更快呢?


原文发布于微信公众号 - 思特沃克(ThoughtWorks)

原文发表时间:2016-06-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏快乐八哥

使用Ubuntu 12.04作为日常电脑环境

搜狗输入法出来之后,我觉得有必要写一篇博客说明一下,如何使用Ubuntu作为日常的电脑系统。我使用的Ubuntu版本是12.04,没有使用Ubuntukylin...

2878
来自专栏编程之旅

iOS漫谈——对于项目架构的思考

又一次的版本更新上架,心情容不得片刻舒缓,新的迭代任务又明白的摆在桌面上。今年上半年自己琢磨完ReactiveCocoa之后,对手上了项目做了MVVM架构的尝试...

1263
来自专栏我是攻城师

携程全线瘫痪,传言代码被恶意删除

3535
来自专栏带你撸出一手好代码

小bug,大智慧

程序员和BUG之间的关系很奇妙, 相互都不喜欢对方, 又离不开对方, 是一对相爱相杀相互纠缠永远无法摆脱对方的对手。 每一个BUG都是程序员无意创造出来的,程序...

2864
来自专栏北京马哥教育

一个人的网站开发

写在前面的话: 前段时间,一个朋友准备做一个教育相关的事情,其人在深圳,大城市嘛,总是想利用业余时间考个证了,听个培训课程了等等来给自己充充电,自己经常去的一...

5215
来自专栏Grace development

电商系统设计之商品[番外篇]

这是电商系统设计系列在商品设计这块的最后一篇文章。以下是其他文章地址,按照逻辑顺序排列如下 – 电商系统设计之用户系统 https://blog.fastrun...

1662
来自专栏梁源的专栏

iOS10凌晨1点发布,小源带你一起升级体验过程

993
来自专栏BIT泽清

苹果审核必看期货App 3.2.1被拒及其他23种原因总结

近年金融行业百花齐放,缺乏监管,正因如此随着政策新规的到来,从17年9月份开始金融类(贷款、理财)上架开始变的异常困难,其中受政策影响的还有彩票类应用; 对于A...

2725
来自专栏即时通讯技术

解密“达达-京东到家”的订单即时派发技术原理和实践

达达-京东到家作为优秀的即时配送物流平台,实现了多渠道的订单配送,包括外卖平台的餐饮订单、新零售的生鲜订单、知名商户的优质订单等。为了提升平台的用户粘性,我们需...

1850
来自专栏FreeBuf

说说最近的一个电商网站“钓鱼”案例

在过去的两年里,利用被黑的电商网站对客户的信用卡信息进行钓鱼,这种手法已经非常盛行了。 历史案例 此前我们曾报告过多起案例,黑客在付款页面和支付模块加上了恶意代...

2466

扫码关注云+社区

领取腾讯云代金券