简单小结接口交互安全问题
一、写在前面 新入职的公司是做C端产品的,比较注重网路安全这一块,所以要求前后端交互报文加解密、签名。这里总结下在落地过程中怎么做的以及一些启发。 二、前后端加解密 (一)防重放攻击 防重放攻击指的是中间人拦截交互报文然后对请求进行重放进行的一种攻击。解决方案一般两种: 签名+时间戳 签名+时间戳+nonce 缺点是签名流程照样可以模拟,因为对于前端来说,前端代码是没有绝对安全的。如果是app破解难度还稍微高一些,但h5或pc则最多只能混淆进行处理。 (二)防中间人攻击以及传输加密 1.https https自带加密,但缺点有: 建立连接过程中的中间人攻击无法防范 用浏览器抓包或者用Fillder还是能够分析出传输明文 2.代码层面仿https加密 对称加密+非对称加密,为什么不单独用非对称,因为单独用非对称加密效率会慢。 具体思路为: 客户端生成随机AES密钥,并用RSA公钥(说是公钥但只是相对的,这里的公钥同样不能泄露)对AES密钥进行加密,AES密钥用于对传输的数据进行加密,然后服务器使用RSA私钥对AES密钥进行解密,用得到的AES密钥对数据进行解密得到真正的数据。 在代码层面可以利用springboot的RequestBodyAdvice和ResponseBodyAdvice扩展来实现消息体的加解密,业务代码侵入小。 三、感受 自我感觉前后端加密签名意义并不是很大