关于RESTful API安全

关于RESTful API安全

随着手机和移动互联网的兴起,REST(Representational State Transfer,表现层状态传输)架构逐渐流行起来,被广泛地使用。

关于RESTful API安全

REST这个名称是Roy Fielding在美国加州UC Irvine大学的毕业博士论文中引入和定义的。Roy Fielding是个著名的互联网技术专家,除了提出REST外,还曾参与HTTP协议以及Apache httpd Web服务器的开发。

关于RESTful API安全

REST 的基本原理包括:

系统上的一切对象都要抽象为资源;

每个资源对应唯一的资源标识(URI);

对资源的操作不能改变资源标识本身;

所有的操作都是无状态的等等。

关于RESTful API安全

实现随机输出名句、查询IP归属地功能:

关于RESTful API安全

获取监控数据功能:

关于RESTful API安全

好了闲话少叙,今天笔者在这里和大家聊聊REST架构中需要关注的RESTful API安全性问题。

API身份验证

HTTP基本身份验证:

API验证一般来说会使用基于Token的认证,第一次认证通过后,就会获取到一个Token字串,以后请求中带上此Token就可以。此Token凭据仅使用Base64编码,没有加密,没有散列。每个请求都在头部中包含此Token字串。因此,如果Web传输时候用的是没有加密的HTTP,而不是HTTPS的话,基本上没有任何安全可言,在网络传输过程中会被别人抓包,很容易窃取到。所以,HTTP基本身份验证非常危险,基本等于自杀。

但是一般来说我们如果是限制在内网、局域网内部使用的话,基本上还是可靠的。

原则一,不对对外开放不安全的API访问权限、

原则二,使用HTTPS加密传输。

Oauth认证

Oauth(Open Authorization)协议为资源访问提供一条简易,开放和安全的通道。

在Oauth认证情况下,服务提供商、资源所有者提供商可靠地访问token,通访问Token获取特定范围的资源URL的许可。Oauth认证时时最主要的安全问题是访问Token泄漏可能很危险,拥有Token的就可以获得操作的权限。

在这方面著名的社交网络网站Facebook就遭遇过安全问题。相关信息可以通过搜索引擎获得相应信息。

关于RESTful API安全

Goldshlager通过特定攻击绕过OAuth的机制,通过漏洞实现劫持。

关于RESTful API安全

最后Facebook对此安全bug进行了买单,支付了发现者12,500美元的漏洞奖励。

关于RESTful API安全

有安全机构曾对国内的服务商的Oauth安全做过调查,发现都曾有过一些问题。

下面是创宇安全团队2014年的研究结果,现在应该都已经修复。

关于RESTful API安全

关于Oauth安全原则

Redirect_uri全路径验证,避免URL跳转出现问题;

状态参数State要随时销毁;

获取访问Token时候,要验证App 密串;

对回调URL进行跳转校验等。

用户输入安全:

应用程序维护中有一条规则安全性军规:"绝不信任任何用户的输入"。这也适用于API的安全。现在,大多数情况下,Web应用程序都对输入进行过滤,但是往往会忽略对来自API的数据进行过滤。比如我们举一个例子:Jetspeed 2.3.1前版本用户管理REST服务的漏洞CVE-2016-2171:

关于RESTful API安全

构造用户管理 REST API 创建用户chonchong:

关于RESTful API安全

然后将用户提升为管理员权限

关于RESTful API安全

还可能有sql注入或者xxl注入的漏洞,比如dotCMS的sql注入漏洞

关于RESTful API安全

安全原则:户输入严格过滤。

RESTful API进行拒绝式攻击(DDOS,CC)

还有一种常见的攻击是对API做ddos攻击。ddos攻击很容易,只需对API接口进行循环调用即可。由于获取数据很慢,耗时,如果服务端对访问数量和频率没有控制的话,很容易就会造成cc攻击。很容易一条脚本、无需肉鸡,无需带宽就能让你的服务在短时间内爆掉。

比如,下面我们展示一个通过WordPress的API爆破账号和密码的python脚本:

关于RESTful API安全

大多数REST API服务供应者,都会每个用户/Token数做限制。速率限制还可以防止暴力破解攻击(比如上面例子)。

安全原则:限制请求并发数,限制用户访问请求的频率。


分享到:


相關文章: