api接口安全浅谈

【0】使用https保证网络传输的安全;

【1】中间人攻击防范策略:
接口调用身份私钥签名公钥验签,这种方式既可以防止参数在传输过程中被篡改,因为一旦篡改,sing签名将对应不上,调用失败;
同时使用公钥和配对的私钥进行签名和验签,保证了服务端和客户端的身份

【2】重放攻击防范策略:
客户端第一次请求使用签名sign,服务端验证通过,给客户端返回一个唯一的订单号,并将该订单号存放在redis缓存中(为了防止脏数据的挤压,给该订单号60秒的过期时间),
客户端接收到该订单号,继续使用签名算法并带上这个订单号请求服务器,服务器验证签名,并验证订单号的存在,
如果签名正确(保证客户端身份),同时订单号存在,则继续处理业务,并将该订单号删除,严格保证充值,消费,转账等接口不被重放;
如果用户在第一次请求的时候被中间人拦截掉请求的所有信息,中间人伪装成客户,请求服务器,
这个时候服务器只是返回一个订单号,因为中间人没有加密算法和公钥,所以不能成功封装第二次请求信息,

如果用户在第二次请求的时候被中间人拦截掉请求的所有信息,中间人伪装成客户,请求服务器,
因为服务器缓存了该订单号并且在验签成功之后业务处理完成,将该订单号删除了,所以真实客户和中间人只能有一个
请求成功,即使中间人请求成功,请求参数也和客户是一模一样的,

这样就保证了该接口不能被重放攻击;
针对POS机移动设备设备,登陆成功之后,更新针对这台设备的秘钥加密之后发送给他,这样反编译获取的那个秘钥也就没用了,之后的秘钥就在内存里面更新

为了保护接口的安全和核心代码不被二次打包,感觉客户端还是需要做些反编译的工作,这属于系统级别的安全。
可以借助第三方安全平台:http://www.ijiami.cn/做apk加密

但是上述的方法解决不了单点登录的问题,单点登录如果第一次被拦截,则会被别人拦截。

通过https请求可以解决问题 ?


 

猜你喜欢

转载自blog.csdn.net/paolei/article/details/86704569