欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

实践 + 理论 | API 接口安全性设计

程序员文章站 2024-03-23 22:14:22
...

实践 + 理论 | API 接口安全性设计

这是小小本周的第一篇,

理论

理论主要体现在两个方面,分别是保证数据在传输过程中的安全性,以及数据如何到达服务器端如何获取到数据,如何不被攻击。

数据加密

数据在传输的过程中很容易被抓包,例如通过Http协议的时候,在用户传输数据的时候既然容易被获取,那么就必须进行加密,这里做法是有两种

  1. 对关键字段进行md5加密,

  2. 在http和tcp之间添加一层ssl层,这一层负责数据的加密和解密,即,https。

数据加签

数据加签就是由发送这产生一段无法伪造的数字串,来保证数据在传输过程中不被篡改,

时间戳机制

数据很容易抓包,经过加密,加签处理,这时候已经相当安全了,但是如果有不法者不关心真实的数据,直接拿到数据进行恶意请求,这个时候,需要使用时间戳机制,在每次请求中加入当前的时间,查看时间是否超过五分钟,如果超过五分钟就为非法请求,未超过为合法请求。

AppId机制

网站都需要用户名和密码才能登陆,并不是谁都能使用该网站,对应的对外接口需要实现一种机制,确定谁可以调用,这里使用的是appID + 用户**,在调用的接口中增加appID + **在服务器端实现相应的验证。

限流机制

如果出现了频繁调用接口的情况,需要给appID进行限流处理,常用的限流算法有令牌桶和漏斗算法。

黑名单机制

如果appID有非法操作,直接列入黑名单,返回错误码。

数据合法性校验

对数据进行合法校验,例如身份证长度,电话号码长度的组成。

实践

数据加密

主流的加密方式有对称加密和非对称加密。

对称加密

对称加密在加密过程中和解密过程中秘钥是相同的,常见的有DES,AES,优点是计算速度快,缺点是数据在传送前,发送方和接收方都需要确定好秘钥,然后双方都能保存好秘钥, 非对称加密,服务器端生成秘钥,秘钥保存在服务器端,公钥给任何人使用,拿着公钥就可以登录秘钥,缺点过慢。

数据加签

这里使用比较多的为md5算法,多种方式组合成为一个字符串,通过md5生成一段加密字符串。一个简单例子。

str:参数1={参数1}&参数2={参数2}&……&参数n={参数n}$key={用户**};
MD5.encrypt(str);

时间戳机制

这里进行时间戳机制 代码如下

long interval=5*60*1000;//超时时间
long clientTime=request.getparameter("clientTime");
long serverTime=System.currentTimeMillis();
if(serverTime-clientTime>interval){
    return new Response("超过处理时长")
}

AppID 机制

生成一个唯一的AppId即可,**使用字母、数字等特殊字符随机生成即可;生成唯一AppId根据实际情况看是否需要全局唯一;但是不管是否全局唯一最好让生成的Id有如下属性:趋势递增:这样在保存数据库的时候,使用索引性能更好;信息安全:尽量不要连续的,容易发现规律;关于全局唯一Id生成的方式常见的有类snowflake方式等;

限流机制

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

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

RateLimiter rateLimiter = RateLimiter.create(5);

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

黑名单机制

给用户设置一个初始的状态,正常状态,中间状态,关闭状态等等。

数据合法性校验

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

你微微的笑着,不和我说话,我什么都不求,只求你深情的给我来个点赞和分享。我是小小,我们下期再见!

实践 + 理论 | API 接口安全性设计

小明菜市场

推荐阅读

● 文末送书 | 数据分析简单入门

● 优雅 | 今天很水的文章-Excel导入导出

● 理论 | 当 Spring Boot 遇上了消息队列......

● 实践 | kafka 基本使用

● 搭建 | 一步成功搭建Centos + Kubernetes 环境

实践 + 理论 | API 接口安全性设计