安全架构-api接口安全设计

安全架构-api接口安全设计

安全架构系列文章是从api接口的安全性设计引入的,讨论了api的业务安全-幂等性设计,传输安全,加签名和加解密,介绍了对称加密,非对称加密的常用算法的实现。继续回到api接口安全性设计方案,除了上述处理外,我们还可以在业务上增加接口调用的限制,防止和阻止异常情况的非法调用api。



前言

api接口主要讨论需要互联网暴露出来或者提供给第三方的接口服务。在讨论了加密,加签名,幂等性设计后,本文再补充常用的安全性处理方式。


一、appid+appsecret方式

appid方式是由接口提供方,给接口调用方的授权,类似于提供一个身份id。
一般appid配合着accessToken来使用,先使用appid和appsecret来调用接口,获取accessToken,在后续的其他接口调用中,传递accessToken. accesToken一般需设置有效期,过期后需重新获取新的值。微信api接口就是这种机制。

大部分网站基本都需要用户名和密码才能登录,并不是谁来能使用我的网站,这其实也是一种安全机制;对应的对外提供的接口其实也需要这么一种机制,并不是谁都可以调用,需要使用接口的用户需要在后台开通appid,提供给用户相关的密钥;在调用的接口中需要提供appid+密钥,服务器端会进行相关的验证;

二、黑白名单

1.黑名单

如果此appid进行过很多非法操作,或者说专门有一个中黑系统,经过分析之后直接将此appid列入黑名单,所有请求直接返回错误码;
黑名单可以是appid黑名单也可以是ip黑名单。
ip黑名单是对某个ip有非法攻击调用接口时,将该ip加入黑名单中,直接不允许调用。

2.白名单

白名单一般是指ip白名单。因为appid本身就是要系统生成,存在于系统中的,已经相当于白名单了。
白名单使用的场景一般是 服务端与服务端之间的调用,如第三方服务端调用接口提供方。此时第三方可以确认为一个或某几个ip。 可以设置ip白名单,在上线的时候,添加白名单后,运行接口调用,不在白名单里的请求ip,不允许调用。
对于客户端调用服务端接口的,一般使用黑名单,因为客户端的ip是变化是多个的。只要黑名单控制住非法ip即可。

三、接口限流

除了上述的接口权限限制和安全控制外,接口调用还有并发数限制。
本来就是真实的用户,并且开通了appid,但是出现频繁调用接口的情况;这种情况需要给相关appid限流处理,常用的限流算法有令牌桶和漏桶算法;
常用的限流算法包括:令牌桶限流,漏桶限流,计数器限流;

1.令牌桶限流 令牌桶算法的原理是系统以一定速率向桶中放入令牌,填满了就丢弃令牌;请求来时会先从桶中取出令牌,如果能取到令牌,则可以继续完成请求,否则等待或者拒绝服务;令牌桶允许一定程度突发流量,只要有令牌就可以处理,支持一次拿多个令牌;
2.漏桶限流 漏桶算法的原理是按照固定常量速率流出请求,流入请求速率任意,当请求数超过桶的容量时,新的请求等待或者拒绝服务;可以看出漏桶算法可以强制限制数据的传输速度;
3.计数器限流 计数器是一种比较简单粗暴的算法,主要用来限制总并发数,比如数据库连接池、线程池、秒杀的并发数;计数器限流只要一定时间内的总请求数超过设定的阀值则进行限流;

具体基于以上算法如何实现,Guava提供了RateLimiter工具类基于基于令牌桶算法:

RateLimiter rateLimiter = RateLimiter.create(5);
以上代码表示一秒钟只允许处理五个并发请求,以上方式只能用在单应用的请求限流,不能进行全局限流;这个时候就需要分布式限流,可以基于redis+lua来实现;

四、数据合法性校验

合法性校验包括:常规性校验以及业务校验;
常规性校验:包括签名校验,必填校验,长度校验,类型校验,格式校验等;
业务校验:根据实际业务而定,比如订单金额不能小于0等;

总结

api接口相关的安全设计文章到此处就结束了,基本可以涵盖所有涉及到的接口安全场景。
接下来将开始深入阅读学习jvm调优相关资料。

参考资料:
https://www.cnblogs.com/matengfei123/p/12425731.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值