一、如何保证接口安全?
问题1.请求参数被篡改;
问题2.接口被重复调用;
解决方案:
1.时间戳超时机制,客户端调用接口时带上当前的时间戳 timetamp,用于防止DoS攻击,服务器接口收到 timetamp 后跟服务器当前系统时间进行对比,如果大于一定时间(比如设置为10秒),则认为请求失败,那么这个请求将被拦截掉。仅仅解决了接口被重复调用的问题,时间戳还是会被修改,所以要结合 sign 签名机制一起处理来保证接口的安全。由于服务器的时间和客户端的时间是存在时间差的,所以客户端时间必须和服务端时间做校验,客户端应用启动后通过接口获取服务器时间 ServerTime,保存本地,并同时记录当前客户端时间 LocalTime1,当下次请求接口的时候,时间即是:LocalTime2 - LocalTime1 + ServerTime。
2.签名机制,对参数进行签名,防止参数被非法篡改。sign一般是将所有非空参数按照升序排序然后+key+timestamp拼接在一起,然后使用SHA1、MD5(timestamp+业务参数:将timestamp、业务参数以字母升序(A-Z)排序,按'key1=value1'+ '&' + 'key2=value2'连接所有参数得到字符串signStr)等加密算法进行加密,作为接口中的一个参数sign来传递,也可以将sign放到请求头中。服务器端收到请求以同样的算法得到签名,和当前签名进行对比,如果不一样,说明参数被更改过,直接返回错误表示,签名机制保证了数据不会被篡改。
二、如何保证接口数据的安全?
问题:请求的参数和返回的数据都有可能被别人拦截获取,而这些数据又是明文的,所以只要被拦截,就能获取相应的业务数据。
解决方案:对所有请求和响应都进行加解密操作,前端提交的数据按照AES或者DES或者RSA加密算法,进行加密,然后提交到服务端,服务端对参数进行解密;响应数据使用AES或者DES或者RSA加密算法加密,客户端进行解密。
参考文章:
接口安全:https://www.cnblogs.com/ming-szu/p/8926179.html
接口安全:https://zhuanlan.zhihu.com/p/200922940
数据安全:https://blog.csdn.net/tianshan2010/article/details/113483393