首页 > 其他分享 >如何设计一个安全的对外接口

如何设计一个安全的对外接口

时间:2023-03-02 10:44:06浏览次数:34  
标签:令牌 加密 请求 校验 接口 安全 限流 数据 对外

安全措施

安全措施大体来看主要在两个方面

  • 如何保证数据在传输过程中的安全性。
  • 数据已经到达服务器端,服务器端如何识别数据,如何不被攻击。

1. 数据加密

数据在传输过程中很容易被抓包,如果直接传输,比如通过 http 协议,那么用户传输的数据可以被任何人获取,所以必须对数据加密。常见的做法是对关键字段加密,比如用户密码直接通过 md5 加密。现在主流的做法是使用 https 协议,在 http 和 tcp 之间添加一层加密层 (SSL 层),这一层负责数据的加密和解密;

2. 数据加签

数据加签就是由发送者产生一段无法伪造的数字串,来保证数据在传输过程中不被篡改;你可能会问数据如果已经通过 https 加密了,还有必要进行加签吗?数据在传输过程中经过加密,理论上就算被抓包,也无法对数据进行篡改;但是我们要知道加密的部分其实只是在外网,现在微服务在内网中都需要经过很多服务跳转,所以这里的加签可以防止内网中数据被篡改;

3. 时间戳机制

经过如上的加密,加签处理,就算拿到数据也不能看到真实的内容,但是有不法者不关心真实的内容,而是直接拿到抓取的数据包进行恶意请求。这时候可以使用时间戳机制,在每次请求中加入当前的时间戳,服务器端会根据当前时间和消息中的时间相减,看看是否在一个固定的时间范围内比如 5 分钟内,这样恶意请求的数据包是无法更改里面时间的,所以 5 分钟后就视为非法请求了。

4.AppId 机制

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

5. 限流机制

本来就是真实的用户,并且开通了 appid,但是出现频繁调用接口的情况,这时需要给相关 appid 限流处理,常用的限流算法有令牌桶和漏桶算法。

6. 黑名单机制

如果此 appid 进行过很多非法操作,或者说专门有一个中黑系统,经过分析之后直接将此 appid 列入黑名单,所有请求直接返回错误码。

7. 数据合法性校验

这个可以说是每个系统都会有的处理机制,只有在数据是合法的情况下才会进行数据处理。每个系统都有自己的验证规则,当然也可能有一些常规性的规则,比如身份证长度和组成,电话号码长度和组成等等。

如何实现

以上大体介绍了一下常用的一些接口安全措施,下面看看以上这些方法措施,具体如何实现

1. 数据加密

现在主流的加密方式有对称加密和非对称加密;
对称加密:对称密钥在加密和解密的过程中使用的密钥是相同的,常见的对称加密算法有 DES,AES。对称加密的优点是计算速度快,缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥,如果一方的秘钥被泄露,那么加密信息也就不安全了。
非对称加密:服务端会生成一对密钥,私钥存放在服务器端,公钥可以发布给任何人使用;优点就是比起对称加密更加安全,但是加解密的速度比对称加密慢太多了;广泛使用的是 RSA 算法。

两种方式各有优缺点,而 https 的实现方式正好是结合了两种加密方式,整合了双方的优点,在安全和性能方面都比较好。

对称加密和非对称加密代码实现,jdk 提供了相关的工具类可以直接使用。

2. 数据加签

数据签名使用比较多的是 md5 算法,将需要提交的数据通过某种方式组合和一个字符串,然后通过 md5 生成一段加密字符串,这段加密字符串就是数据包的签名,可以看一个简单的例子:

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

注意最后的用户密钥,客户端和服务端都有一份,这样会更加安全;

3. 时间戳机制

解密后的数据,经过签名认证后,我们拿到数据包中的客户端时间戳字段,然后用服务器当前时间去减客户端时间,看结果是否在一个区间内,伪代码如下:

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

4.AppId 机制

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

5. 限流机制

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

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

RateLimiter rateLimiter = RateLimiter.create(5);

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

6. 黑名单机制

可以给每个用户设置一个状态比如包括:初始化状态,正常状态,中黑状态,关闭状态等等,或者我们直接通过分布式配置中心,直接保存黑名单列表,每次检查是否在列表中即可。

7. 数据合法性校验

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

标签:令牌,加密,请求,校验,接口,安全,限流,数据,对外
From: https://www.cnblogs.com/ludg/p/17171014.html

相关文章

  • 接口测试必备技能 - 加密和签名
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试1、什么是......
  • 网络安全丨二进制小白应该如何学习入门?
    作者:黑蛋昨天说了一下为神马二进制学习周期长,今儿就来聊一聊Windows二进制小白应该如何学习入门。学逆向,先要学正向,这个是没办法避免的事情,不要想着一开始就要搞破解,搞病......
  • haproxy 2.x 请求头解决安全问题
    就在最近haproxy官方发布了一个通知关于安全漏洞的,包含了2.0以及最新版本的,对于使用了2.x版本的用户最好升级下临时解决方案frontendmyfrontendhttp-r......
  • 路飞:路飞前端全局css,全局配置文件、配置axios实现前后台交互、安装vue-cookies、安装e
    目录一、路飞前端全局css,全局配置文件1.1整理项目1.2设置全局css1.3配置全局js二、配置axios实现前后台交互三、安装vue-cookies四、安装elementui五、安装bootstrap和j......
  • 如何绕过登录鉴权直接测试后端接口
    目录回顾Cookie、Session和Token携带Cookie测试携带Token测试一、回顾Cookie、Session和Token(1)CookieCookie是一段存储在浏览器端的文本数据,Cookie中......
  • 安全SSH设置免密码登录
    SSH类似于Telnet,可以用来远程操控,但是这种方式走的是明文,这样不安全。安全shell是加过密的,这样就保证安全。1.执行命令,产生秘钥命令:ssh-keygen-t rsa,一直回车,产生两个......
  • 企业IM即时通讯软件:就选安全稳定、自主可控的WorkPlus
    随着组织数字化程度不断加深,业务与信息深度融合,即时通讯软件已经成为政企工作中必不可少的一部分。在高质量、高速发展的同时,组织通信协作的安全保护边界越来越模糊,给组织带......
  • VMware NSX 4.1 发布 - 网络安全虚拟化平台
    请访问原文链接:VMwareNSX4-网络安全虚拟化平台,查看最新版。原创作品,转载请保留出处。作者主页:www.sysin.orgVMwareNSX提供了一个敏捷式软件定义基础架构,用来构建......
  • Confluence版本升级至安全版本6.13.23
    由于CVE-2021-26084,需要把原来使用的Confluence升级为安全版本6.13.23一、备份原conflunce数据  二、官网下载zip版本安装包并上传到服务器解压https://www.atlass......
  • HDFS数据安全与隐私保护
    一、HDFSTrash垃圾桶1.文件系统垃圾桶背景HDFS本身也是一个文件系统,那么就会涉及到文件数据的删除操作。默认情况下,HDFS中是没有回收站垃圾桶概念的,删除操作的数据将......