怎样计划一个安全的对外接口

源代码 2024-9-4 15:53:31 26 0 来自 中国
一、安全步调

安全步调大要来看重要在两个方面,一方面就是怎样包管数据在传输过程中的安全性,另一个方面是数据已经到达服务器端,服务器端怎样识别数据,怎样不被攻击;下面具体看看都有哪些安全步调。
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的实现方式恰好是联合了两种加密方式,整合了两边的长处,在安全和性能方面都比力好。
2.数据加签

数据署名使用比力多的是md5算法,将必要提交的数据通过某种方式组合和一个字符串,然后通过md5天生一段加密字符串,这段加密字符串就是数据包的署名,可以看一个简单的例子:
str:参数1={参数1}&参数2={参数2}&……&参数n={参数n}$key={用户密钥};MD5.encrypt(str);注意末了的用户密钥,客户端和服务端都有一份,如许会更加安全;
3.时间戳机制

解密后的数据,颠末署名认证后,我们拿到数据包中的客户端时间戳字段,然后用服务器当前时间去减客户端时间,看效果是否在一个区间内,伪代码如下:
long interval=5*60*1000l;//超时时间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等;
三、总结

本文大抵枚举了几种常见的安全步调机制包罗:数据加密、数据加签、时间戳机制、AppId机制、限流机制、黑名单机制以及数据合法性校验;固然肯定有其他方式,接待增补。
原文:https://my.oschina.net/OutOfMemory/blog/3131916
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-19 06:21, Processed in 0.145499 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表