API安全系列——API安全测试31个Tips(一)

原项目链接: 31-days-of-API-Security-Tips

tip1:

旧的API版本通常会包含更多的安全漏洞,他们缺乏一些安全机制。我们可以使用REST API的可预测性来预测是否存在旧的API版本。比如当前有一个API被命名为/api/v3/login ,我们可以检查/api/v1/login是否存在 。

比如:

http://api.example.com/v3/login

可以把v3换成v2,v1等等,其实如果想探测到更多的版本,可以探测一些大范围比如v0-100等等。还有存在一些v2.1 这种小版本的可能。

http://api.example.com/v2.1/login

tip2:

永远不要认为只有一种方法来验证API的身份。现代的应用程序有很多API接口用于认证:/api/mobile/login| /api/v3/login| /api/magic_link等。找出他们并测试所有的授权认证问题。

认证的接口确实很多,包括

  • /api/mobile/login
  • /api/v3/login
  • /api/magic_link

这种需要去变量很多的二级子目录,再加上login,或者一些其他的接口也是可以登录,这个需要查看官方的文档。

OAuth的认证机制,需要学习一下。很多大公司的OAuth的接口如下:

在线服务接口端点
RFC 6749 /token
Twitter/oauth2/token
Dropbox/oauth2/authorize
Facebook /oauth/access_token
Google/o/oauth/token
Github/login/oauth/access_token
instagram/oauth/authorize
tumblr/oauth/token

做认证的时候,公开API 一般为:

https://api.example.com/v1/oauth2/token

tip3:

还记得5-10年前SQL注入是多么常见么?你几乎可以进入任意一家公司。BOLA(IDOR)是API安全最新的流行病。作为一个渗透者,如果你知道如何利用它,你的荣誉就得到了保证。

BOLA参考信息:https://medium.com/@inonst/a-deep-dive-on-the-most-critical-api-vulnerability-bola-1342224ec3f2

看了一下BOLA,打算写一篇文章来介绍一下,后面放文章链接。

tip4:

测试一个Ruby on Rails App的时候,注意一个包含URL?的HTTP参数。 开发人员有的时候会使用”Kernel#open” 函数访问urls== Game Over,只需要发送一个管道作为第一个字符,然后发送一个shell命令(通过设计的命令注入)

更多的参考函数文档: https://apidock.com/ruby/Kernel/open

tip5:

寻找SSRF? 使用它来

  • 内部端口扫描
  • 利用云服务
  • 使用http://webhook.site 网站来反查IP地址和HTTP库
  • 下载大的文件(7层 DOS)
  • 反射SSRF,本地管理平台泄露

tip6:

Mass Assignment(批量赋值)是一个真实存在的。现在框架鼓励开发人员在不理解安全影响的情况下使用MA。在开发过程中,不要猜测对象的属性名称,只需要找到一个返回所有属性的GET端口即可。

Infographic

更多的了解批量赋值:

一文带你了解 Laravel 中的 Mass-Assignment (批量赋值)

tip7:

一家公司向开发者公开了API接口,而且在移动端和web端使用了相同的API程序。我们需要分开测试它们,不要假设它们实现了相同的安全机制。

tip8:

在进行测试REST API时,我们也应该检查一下API是否也支持SOAP。将content-type更改为“application/xml”,在请求主体中添加一个简单的xml,并查看API如何处理它。

有时身份验证是在不同的组件中完成的。可能是在REST和SOAP API之间共享的,所以SOAP API可能支持JWT。如果API返回带有DUMPling的stack trace,那么它很可能是存在漏洞的。

tip9:

试图找到BOLA(Broken Object Level Authorization)的漏洞?

HTTP bodies/headers 中的id往往比url中的id更容易受到攻击,首先试着关注他们。

tip10:

利用REST的特性来查找管理API endpoints!

比如你看到一个api叫做 GET /api/v1/users/<id>,我们可以试着修改请求方法POST/DELETEcreate/delete users

其实这些API端口是很好猜的,而且设计规范的API 也应该这样设计。

一个规范的设计:

https://api.example.com/v1/users/<id&gt;

可以替换版本,二级目录,id ,包括方法等等,这都是可以用遍历工具来找出来的。

产品课11:创业应该选择增量市场还是存量市场?

​创业还有一个很重要的东西,就是在任何一个时间点要知道我们在做增量还是存量的市场。

存量市场虽然并非没有机会,但存量市场的发展实在是太难了,尤其是对后发者而言。因为基本上对于后发者而言在存量市场发展的话差不多全世界都在与你为敌,一旦一个市场进入存量市场,那么行业格局变化的可能性就降低太多了。


存量市场对组织的要求也很高,所以最好还是在增量市场去发展。衡量增量存量的一个标准就是渗透率,比如一天几百万张机票有多少是通过互联网卖出去的,当这个比值超过50%之后市场格局要变就很难了。


在互联网生意里,增量存量的一个影响就是获客成本的差别,不管是打广告还是补贴还是做地推。增量和存量市场的获客成本的差别起码是十倍,这导致进入存量市场,单一个用户获取成本太高,就会导致这个生意不成立。


但存量市场并不意味着没机会,举一个百事可乐的例子,百事可乐原来是很小的公司,可乐这个行业是可口可乐开创的,可口可乐这个公司又比较强,最高的时候市占率可能有百 分之九十几。


这个时候百事可乐有一个叫John Sculley的人,他认为虽然很艰难,但还是 有机会抢回市场份额的。这个领域用户的心智 “可乐就是可口可乐”,如何改变消费者心智呢?


这里面可利用的机会就是一个人在13岁叛逆期的时候会在方方面面都不认同自己的父 母,包括父母的消费品牌。如果我们站在未来的100年来看,这些新出生的人就是增量市场,刚出生的人是没办法选择自己的消费品牌的,但总有一天他会有自己选择的权利,我们要在那个时间点告诉他,“年轻人应该喝百事可乐”,这个口号是可口可乐是打不了的, 也不能有的定位。


这个口号不仅让消费者在年轻的时候喝百事可乐,而且未来这些年轻人变老了也会觉得自己年轻,还会继续喝百事可乐。所以存量市场也是有机会的,这很大程度上取决于你在多大程度上和第一名做差异化。记住迈克波特三战略:成本领先、差异化、专注。

其实最好做的市场是增量市场,因为增量市场意味着这是一个新的价值网。iPhone开启了移动互联网,iPhone是第一台智能手机吗?当然不是。诺基亚早就开始了开发智能手机,并且智能手机的性能开发得很好。


但是诺基亚对手机的定义是通信产品,iPhone对手机的定义是互联网手机,是移动互联网的终端。看上去是一样的产品,但代表了完全不同的两张价值网。


因为整个社会在发展,整体的社会能力在升级,新的需求被释放了出来,就会产生新的价值网。新崛起的价值网,就是我们新的机会。

产品课10:你知道创新者打不过后发者的根本原因吗?

今天的文章,主要是产品课中介绍的先发优势和后发优势的不同,重点是在后发优势。


先发优势


先发优势,一定程度上马太效应里也存在类似的影响。因为你先做了,因此你获得了创新者的标签,因此吸引了领先的人才,也提前知道了有什么样的坑,也可能积累了不平等的战略资源,所以先发优势是很重要的,整个商业里先发优势是主体。 

后发优势

后发优势其实也很重要。比如那些牛逼的产品经理, 举例的那4个产品都不是行业第一个,但并不是说因为这4个都不是第一个,先发优势就不重要,因为这4个成功的产品背后对应着4个成功的产品经理。
知道先发优势的人都知道先发优势很可怕,这常常导致后发还有机会的时候,你放弃进场了。
后发也有很多优势,如果一个行业已经有了先发者,后发进场是多困难? 就美团当前的这些业务中,除了团购是中国第一家,其他的很多都是后发的。

后发优势一:你不需要去说服很多人了。


先发者要去说服很多人,这种痛苦是很多人完全不能想象的。80年代末乔布斯对PC的一句话介绍是,如果以生物移动一公里消耗能量来排名,第一的是蜂鸟,而人类排名比较靠后,有了自行车之后人类的排名大幅提升了,电脑就是人类思考的自行车。


这个描述也很绕吧,可见先发是一件多难的事。而后发者就不会遇到这样的问题。


例如你为什么要做电动车,去哪充电,别人都开油车,我开电动车是不是显得很傻,这些问题后发者都不会遇到。在抽象层面,人类是热爱创新的,在具象层面人类是恐惧创新的。

后发优势二:知道这个事情一定能实现。


先搞原子弹和后搞原子弹遇到的困难是完全不一样的。二者面临的不确定性是完全不一样的。 

后发优势三:后发者通常是比较常规的商业思维,而创新者通常思维是很独特的,但也因此带来了认知盲区。


比如沃兹他做PC完全是出于自己的需求,而乔布斯就是比较有商业思维,要把PC推广到大众市场去。


莱特兄弟搞飞机的时候,前人既不知道飞机有什么用,也不知道商业模式是什么,他们甚至根本不是为了商业目的要发明飞机,所以莱特兄弟在飞机上也没获得太大的商业成功。


所以很多创新发现的过程是不太可预测的。再比如说自行车这个入门门槛比三轮车高的产品发明是早年源于欧洲叛逆年轻人标新立异的需求,类似现在年轻人玩滑板,发明这些东西的时候就没有认真想过商业模式。


常常由于我们对先发优势有了太多的晕轮效应而让我们忽视了后发优势。


后发优势举例

举一个和美团相关的例子。送外卖这个事说不上是谁发明的,没有互联网的时候也有外卖,饿了么也不是第一家做互联网外卖的,但饿了么确实是第一家取得突破的。


饿了么的做法非常有独到之处,他们选择开哪个学校,几个创始人分别去学校数这个校园有多少外卖员进出,如果外卖很多,说明这个学校的外卖基础不错,是送外卖的商家在学校里发传单,学生拿到传单后贴在墙上需要了就打电话点餐。


不同学校的食堂水平差别很大,所以的确有一部分学校需要外卖。送外卖的商家会遇到一个问题,每天中午几十单的外卖,学生打电话给商家告知餐品和地址,商家只能手抄下来,而且订单一多起来,商家经常记不住哪些订单送了哪些没有,这导致商家的人力和时间成本高,饿了么给商家做了一个软件,让消费者在网站上订外卖,这样商家不用手抄电话和地址,而且哪个订单完成了在网站上勾选就可以了,网站也可以显示等待时长,送外卖的人也可以看订单完成情况,减少了

商家的麻烦,这相当于是给商家做了一个管理软件。这个做法非常巧妙,大幅提高了效率,如此受欢迎,以至于商家会主动把自己的外卖铃声


设置为“点外卖请用饿了么”,商家甚至会把自己的账单本子给到饿了么,因为帐单本上有消费者的电话,饿了么会用这个本子挨个给用户发短信让他们用饿了么。这个做法非常巧妙,不需要给用户提供补贴,不需要说服商家和用户使用自己的软件,不需要自己建配送团队,这个做法导致他们作为一个创业团队,从起步做到十几个城市基本没亏钱还有200%左右的增长。


但这个巧妙的做法背后存在的问题是,他们发现这样做性价比很高,导致他们所有的业务扩张都是在重复这个过程,去一个学校如果外卖需求不旺盛就不开这个城市了,问题是这个做法只能发掘到最早期的用户和商家,不能代表未来这个市场潜在的商家和用户。


比如说饿了么开了十几个城市,但没有开大学生数量最多的武汉。美团的思维方式是用大学生数量来测算整个市场的规模,当时美团也调研了饿了么在上交的在校大学生数和订单数量,算出人均月订单量后进一步估算出这个市场的规模应该有200万单,按这个来说应该去开武汉,但饿了么没有开。


这也是创新者和后发者思考问题的差异之处,因为创新者实在太难了,或者思维方式本身就不同,有的不为商业目的而创新,有的因为资源问题需要极度优化资源投入,这本身也会导致创新者存在一些思维盲区。


美团在进场的时候就按正常的商业逻辑去思考,决定进入更多饿了么没开的增量市场,因为在他们现有的市场饿了么做得已经挺好了,消费者商家很认可,业务人员很熟练,于是美团开了很多饿了么还没开的城市,起步就开了20个城市,开20个城市的原因是算过了市场体量,这个事情是个大生意,但只能招到20个城市经理,那就只能先开20个城市,2个月之后开了60个城市,人不会做这个业务也不要紧,先把人扔进去让用户看到这个产品。这也先发者和后发者思维方式的差别。


决定起步的时候美团内部也纠结了很久,因为觉得他们的产品和团队都挺好,但是最后还是觉得应该该进场。因为这是个大生意,这个市场不会只剩下1家。饿了么最后卖掉的估值是95亿美金,作为一群没有工作过的大学生创业者在30岁左右的年纪实现这个成就,也是很成功的了。

所以后发也有很多优势的,为什么蔚来非常激进的投入,因为他们相对于特斯拉都是后发者,知道这个市场非常大且不会只有一家,因为油车的市场很大且行业里有多家,所以敢于激进地做这个事情。


而Elon Musk在做电动车的过程中是很惨的,他本人创业多次经验丰富,自己也很有钱并且是硅谷PayPal帮的核心成员。即使如此在特斯拉发展的过程中也多次因为没钱差点倒闭了,一度想要卖给Apple还没被接受,Elon Musk也用尽了各种手段为特斯拉去融资。并且Elon Musk不是特斯拉的创始人而是投资人,但由于这个事情太烧钱了,以至于只有马斯克这种在资本市场有号召力的人才能持续融到钱,于是他去做了特斯拉的CEO。 


总结一下,先发优势和后发优势的差别,创新者和后发者的根本差别是创新者通常有思维盲区,而后发者思维盲区会小些。

产品课09:打造生态企业的关键:产业链

我们说一个行业很大的时候,也要想到这个行业有很多参与者,所以我们还要想到产业链结构。

行业可以很大,但产业链条里的每一个环节可都不一样。每个产业链都有链主,链主才是这个行业里生存最好的角色,也在产业变革中是更有主动权的一方。

比如电脑这个行业的链主是微软,如果你在这个产业链里不够强势,会导致在产业发生变化的时候你可能比较被动。比如微软现在做云计算,云计算意味着CPU和操作系统不直接卖了,而是放在云上卖。关于产业链有不同的理论,有一个叫微笑曲线理论,是一个台湾同胞发明的。在一个产业里面生存最好的是处在最上游接近核心供应资源和最下游接近消费者的企业。

比如沃尔玛和7-11就处于最接近消费者的地位, 这个理论常见于链条比较长的行业,还有些行业比较复杂就涉到生态企业。

前段时间有个上市的一个企业叫Unity,200亿美金市值,做游戏引擎,如果他只做游戏引擎的话,只是一个技术提供商,做不到这么高市值,Unity现在建立整个行业的一个生态,比如做游戏经常需要一些素材,Unity是有素材商店的,还有用户端分发能力。

现在最受追捧的是生态企业,比如当前Amazon在美国出版这个行业的作用,书不是一个大行业,Amazon最早是做 互联网卖书的,为了卖书做得好他也做书评,下一步Amazon做了电子书Kindle,他把书的版权买过来之后电子化了, 当你的纸质书和电子书都在Amazon上卖且书评都在Amazon上时,这就涉到你的书是不是要在Amazon发行,如果你写纸质书,转化成Kindle电子书还有一个转换的过程,所以Amazon做了一步,作者可以让作者写作过程中直接用Kindle的格式写,写完再帮你出纸质书,把这个过程反过来了,这样Amazon就在推动阅读出版整个行业数字化,线上化过程中大幅提高了行业效率,并建设起了行业生态。

当然有的行业没有生态,你硬要搞生态就会掉到坑里去,而Amazon做的事都是让整个行业的效率更高。反过来如果做生态能提高效率,那么你要么成为生态建设者,要么加入那个生态成为一员,否则就会被生态淘汰掉。 

关于产业链还有一个比较经典的理论,就是波特五力模型。这里面并不是每一个都和产业链有关系,但这里面提到了和上下游的关系,下游是客户,上游是供应商。

如果简化来看一个生意,一般来说都是有上下游的,什么因素会影响上下游之间的关系呢? 一个核心的因素就是上游或下游的市场集中度。之前讲过市场规模和市场集中度,而在产业链关系里,市场集中度影响到了上下游之间的产业链关系。

对一家公司而言,最好的情况是上下游的集中度都很分散,就只有你的集中度很高,不过这种运气不是总有。

这里给个波特五力模型的简单介绍。波特五力模型是迈克尔·波特(Michael Porter)于20世纪70年代初提出。用于分析行业竞争态势的工具,可以有效的分析企业的竞争环境,对企业战略制定产生全球性的深远影响。具体应用场景如下:

  1. 新市场评估
  2. 竞争策略制定
  3. 行业进行分析

波特五力模型表示行业中存在着决定竞争规模和程度的五种力量,这五种力量综合起来影响着产业的吸引力以及现企业的竞争战略决策。


五种力量分别为:

  1. (上游)供应商的讨价还价能力;
  2. (下游)购买者的讨价还价能力;
  3. 潜在进入者威胁;
  4. 替代品的威胁;
  5. 同行业竞争者竞争程度。