免费注册


API安全治理

2022-05-10 人浏览

API是系统提供服务的接口,外部(webmobileserver等)请求API,经过一些业务逻辑后,返回响应。API安全主要涉及网络安全、应用安全、信息安全, 是基于这三种安全规则的交叉

API安全的目标有三个:

机密性(Confientiality):确保信息只被预期的读者访问。

完整性(Integrity):防止未授权的创建,修改和删除。

可用性(Availability):当用户需要访问API时,API总是可用的

常见的API风险:

欺骗(Spoofing):伪装成某人。

干预(Tampering):将不希望被修改的数据、消息或设置改掉。

否认(Repudiation):拒绝承认做过某事。

信息泄漏(Information disclosure):将你希望保密的信息披露出来。

拒绝服务(Denial of service):阻止用户访问信息和服务。

越权(Elevation of privilege):做了你不希望他能做的事。

解决API风险的安全机制:

认证:(欺骗),确保你的用户或客户端真的是他们自己。

授权:(信息泄漏、干预、越权),确保每个针对API的访问都是经过授权的。

审计:(否认),确保所有的操作都被记录,以便追溯和监控。

流控:(拒绝服务),防止用户请求淹没API

加密:(信息泄漏),确保出入API的数据都是私密的。

 

1.   token方案

token是一种在web端使用最广的接口鉴权方案. token是一种身份验证的机制,初始时用户提交账号数据给服务端,服务端采用一定的策略生成一个字符串(token),token字符串中包含了少量的用户信息,并且有一定的期限。服务端会把token字符串传给客户端,客户端保存token字符串,并在接下来的请求中带上这个字符串

token方案中,用户登陆后,redistoken一般有2小时的有效时间,有效时间到了,用户会退回到登陆页面,重新登陆并获取token

目前业务类型的项目当中使用最广的方案,而且实用性非常高,可以很有效的防止黑客们进行抓包、爬取数据。不过token方案也有缺点,当与第三方对接接口或作为第三方对接接口是,token失效会导致大批量的接口调用失败,这个问题的解决方法之一是再获取token时记录时间戳,每次调用接口时,在request 拦截器判断当前时间和token时间戳的时间差,如果接近token失效时间,则重新获取token,使用心得token调用接口,并更新获取token时间戳。

2.   数据加密

如果通过 http 协议直接传输数据,在传输过程中是容易被抓包,那么用户传输的数据可以被任何人获取,所以必须对数据加密。

常见的做法对关键字段加密,比如用户密码直接通过 md5 加密;现在主流的做法是使用 https 协议,在 http tcp 之间添加一层加密层( SSL ),这一层负责数据的加密和解密

3.   数据签名

接口签名,顾名思义,就是通过一些签名规则对参数进行签名,然后把签名的信息放入请求头部,服务端收到客户端请求之后,同样的只需要按照已定的规则生产对应的签名串与客户端的签名信息进行对比,如果一致,就进入业务处理流程;如果不通过,就提示签名验证失败

即使已经使用https对数据进行加密,还是用的到数据签名的,一是有的不法者并不关心真实的数据,而是直接拿到抓取的数据包进行恶意请求,也就是DDOS攻击,这时候可以在数据签名中添加时间戳。在每次请求的数据签名中加入当前的时间,服务器端会拿到当前时间和签名中的时间相减,看看是否在一个固定的时间范围内,比如5分钟内。这样恶意请求的数据包是无法更改里面时间的,所以5分钟后就视为非法请求了。二是我们加密的部分其实只是在外网,但现在很多服务在内网中都需要经过很多服务跳转,所以这里所以这里的加签可以防止内网中数据被篡改。

 

timestamp 表示时间戳,当请求的时间戳与服务器中的时间戳,差值在5分钟之内,属于有效请求,不在此范围内,属于无效请求

nonce 表示临时流水号,用于防止重复提交验

4.   参数加密

现在主流的加密方式有对称加密(单钥加密)和非对称加密(双钥加密)

对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。对称加密计算速度快,适合对大数据进行加解密,常见的对称加密算法:DESAES3DES等等。

非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。比起对称加密更加安全,但加解密的速度比对称加密慢得多,常见的非对称加密算法:RSAECC

由于对称加密加解密速度快,因此可以和非对称加密混合使用,可以使用非对称加密方式加密对称加密的密钥,来保护密钥的安全。

除了参数加密,用户密码保存到数据库时也要进行加密,常见的有MD5SHA1等单向HASH算法,使用这些算法后,无法通过计算还原出原始密码,而且实现比较简单   

随着对MD5密文查询工具的出现,而很多用户的密码又设置简单,单纯的对用户密码进行MD5加密后保存,用密文很容易就能反查询得到某用户的密码,因此用户登录时,可以用MD5 + RSA + Salt来确保密码不会被泄露

5.   限流机制

常用的限流算法包括:计数器算法,令牌桶算法,漏桶算法

5.1 计数器

5.1.1 计数器固定窗口算法

计数器固定窗口算法是最基础也是最简单的一种限流算法。原理就是对一段固定时间窗口内的请求进行计数,如果请求数超过了阈值,则舍弃该请求;如果没有达到设定的阈值,则接受该请求,且计数加1。当时间窗口结束时,重置计数器为0。这种算法实现简单,易于理解,不过弊端就是,在开始的时间,访问量被使用完后,会有长时间的真空期是处于接口不可用的状态的.

无标题

5.1.2 计数器滑动窗口算法

计数器滑动窗口算法是计数器固定窗口算法的改进,它把时间以一定比例分片,比如一分钟分为 6 个区间,每个区间为 10s。每过一定区间的时间,就抛弃最前面的一个区间,如下图所示。如果当前窗口的请求数量超过了限制数量的话,就拒绝后续请求

5.2 漏桶算法

请求来了之后会首先进到漏斗里,然后漏斗以恒定的速率将请求流出进行处理,从而起到平滑流量的作用。当漏桶中的请求满了,会丢弃后续多余的请求,直到桶中腾出空间。这样保证了请求以恒定的速率流出。在系统看来,请求永远是以平滑的传输速率过来,从而起到了保护系统的作用,但是还是没有办法解决流量突发的问题。

5.3 令牌桶算法

令牌桶算法是对漏桶算法的一种改进,桶算法能够限制请求调用的速率,而令牌桶算法能够在限制调用的平均速率的同时还允许一定程度的突发调用。

在令牌桶算法中,存在一个桶,用来存放固定数量的令牌。算法中存在一种机制,以一定的速率往桶中放令牌。每次请求调用需要先获取令牌,只有拿到令牌,才有机会继续执行,否则选择选择等待可用的令牌、或者直接拒绝。由于令牌桶的令牌是源源不断生成的,当访问量小时,可以留存令牌达到令牌桶的上限,这样当短时间的突发访问量来时,积累的令牌数可以处理这个问题.当访问量持续大量流入时,由于生成令牌的速率是固定的,最后也就变成了类似漏斗算法的固定流量处理

6.   黑名单机制

我们可以给每个用户设置一个状态比如包括:初始化状态,正常状态,中黑状态,关闭状态等等;或者我们直接通过配置中心,直接保存黑名单列表,每次检查是否在列表中即可

上一篇: 数据仓库概述(一)

相关文章