API接口平安的先容

前三点我们可以使用加密的方式来解决,第四点我们写代码时要注重防xss和sql注入等。
设置基本参数
首先是接口接见的平安性的保障,不是谁想对接口接见就能接见的,解决头脑:
一样平常我们可以设置一些接见的基本参数,然后对基本参数举行加密天生sIGn值,然后将这些基本参数和sign都放在http协议的header头中,每一次接见都要带上这些基本参数和sign。
对于app的接口的基本参数:
app的版本号version 如version1.1.2
app的装备的类型app_type:安卓手机,安卓平板,IOS手机,IOS平板
app的装备的装备号:did
model:装备的型号:如三星,OPPO15,HUAWEIp30等
时间戳:
sign值:使用上面参数举行加密获得的值
(也可以自定义一些参数)
sign的天生可以使用AES的加密方式,注重客户端的加密解密的算法要一致。larAVel框架中加密的密串是app_key使用的算法是AES-256-CBC


sign值也可以使用md5加密方式,我们可以把基本参数先举行ksort排序,再转成键值对的字符串然后对其md5加密成sign,然后把基本参数和sign值一起传入给服务端,在服务端重复客户端的加密方式,对比sign的值。

对于web的接口的基本参数:
随机数
时间戳
使用随机数和时间戳和秘钥key天生sign值
(也可以有其余基本参数,可以自定义)
当我们发送http请求时,我们应该将随机数时间戳,以及使用随机数和时间戳和秘钥key通过AES或者MD5加密天生的sign值,通报到服务端,在服务端重复客户端的加密方式对比sign的值。(秘钥key值不用通报,是服务端和客户端配合约定的密串)(这种方式类似于微信民众号加密的方式)

以上方式的优点和坏处
使用以上的加密方式可以防止用户对数据包举行串改,然则防不住用户将网络包举行抓包,然后对接口发送大量的请求占用资源。
解决方案
我们可以对接口举行时间上的判断,我们可以拿服务端的时间戳和客户端传来的时间戳的差值不能跨越10秒,否则用户则接见不到我们的接口。
以上方式的优点和瑕玷
优点:
可以解决用户一直往接口发送请求。
瑕玷:
1由于客户端的时间戳和服务的时间戳不一定一样,这样用户可以修改客户端的时间,继续在10种内发送大量的请求。
2纵然时间问题解决,用户依旧可以在10秒以内大量的往接口发送请求。
解决方案:
对于时间问题,我们可以在服务端写一个返回时间戳的接口,返回的时间最好是毫秒。
我们可以验证完sign值后将sign存入到redis中(数据库,文件缓存,memcache中),过时时间只要比10秒中大一点即可,等下一次检测sign值之前判断redis中有无sign值,若是有说明sign已经被验证过了,说明被别人抓包了,若是没有我们在检测sign同时将sign值存入到redis中。
以是检测流程:
1先检测时间是否跨越划定时间。
2检测redis中有无sign值。
3检测sign是否准确。
4对发送过来的参数举行解密。

注重:我们通报参数也可以通报使用对称加密加密后的密串,在服务端可以举行解密获取参数。我们服务端返回数据时亦可以使用对称加密,客户端收到数据后可以对密串举行解密