最近,一个项目需要提供一个与外部世界的接口来提供公共域名访问,并且该接口与交易顺序相关,因此安全性非常重要。这里我们已经整理了一些常见的安全措施以及如何实施它们。
一、安全措施
我个人认为安全措施主要有两个方面:一方面,如何保证数据在传输过程中的安全性;另一方面,如何识别数据以及当数据到达服务器时如何不被攻击;让我们看看有什么安全措施。
1. 数据加密
我们知道数据在传输过程中很容易被捕获。如果它是直接传输的,例如通过http协议,用户传输的数据可以被任何人获得。因此,数据必须加密。常用方法加密密钥字段,例如直接通过md5加密的用户密码。目前主流的方法是使用https协议,在http和tcp之间增加一个加密层(SSL layer),负责数据加密和解密。
2. 数据加签
数据签名是发送方无法伪造的数字字符串,以确保数据在传输过程中不会被篡改。你可能会问,如果数据已经被https加密,有必要签名吗?数据在传输过程中被加密,理论上,即使被捕获,也不能被篡改。然而,我们需要知道加密部分只在外部网络中。现在许多服务需要通过内部网络中的许多服务跳转,所以这里的签名可以防止内部网络中的数据被篡改。
3. 时间戳机制
数据很容易捕获,但是经过上述加密和签名处理后,即使你得到了数据,你也看不到真正的数据。然而,一些罪犯并不关心真实数据,而是直接获取恶意请求的捕获数据包。此时,可以使用时间戳机制将当前时间添加到每个请求中,服务器端将获得当前时间和消息中的时间之间的减法,以查看它是否在固定的时间范围内,例如5分钟。这样,恶意请求的数据包不能改变内部时间,因此5分钟后将被视为非法请求。
4. AppId机制
大多数网站基本上都需要用户名和密码才能登录。没有人可以使用我的网站。这实际上是一种安全机制。事实上,相应的外部提供的接口也需要这样的机制。不是每个人都能称之为。需要使用该界面的用户需要在后台打开appid,并向用户提供相关密钥。调用接口需要提供Appid密钥,服务器端将进行相关验证;
5. 限流机制
是一个真正的用户,已经打开了appid,但是经常调用接口。在这种情况下,需要限制相关的appid。常用的限流算法包括令牌桶和漏桶。
6. 黑名单机制
如果这个应用程序id做了许多非法操作,或者如果有一个特殊的黑白系统,它将在分析后被直接列入黑名单,所有请求将直接返回错误代码;
7. 数据合法性校验
这可以说是每个系统都会有的处理机制。只有当数据合法时,才会进行数据处理。每个系统都有自己的验证规则,当然,也可能有一些常规规则,如身份证的长度和组成、电话号码的长度和组成等。
二、如何实现
以上一般介绍一些常用的接口安全措施,当然可能还有其他我不知道的方法,希望你能补充一下,让我们看看上面的方法和措施以及如何实现它们。
1. 数据加密
现在主流的加密方法是对称加密和非对称加密;
这两种方法各有利弊,而https实现只是两种加密方法的组合,它融合了双方的优势,在安全性和性能方面相对较好。
对称加密和非对称加密代码实现,jdk提供了可以直接使用的相关工具类,但这里介绍的不多;
配置和使用https相对复杂。请参考我上一篇文章《HTTPS分析与实战》。
2. 数据加签
data signature使用md5算法,该算法以某种方式将要提交的数据组合成字符串,然后通过md5生成加密字符串。这个加密的字符串是数据包的签名。您可以看到一个简单的例子:
str:参数1={参数1}参数2={参数2}.参数n={参数n}$key={用户密钥};MD5 .加密(字符串);
注意最终的用户密钥,客户机和服务器都有一个副本,这样会更安全。对于签名认证后的
3. 时间戳机制
的解密数据,我们在数据包中获取客户端时间戳字段,然后使用服务器的当前时间来减少客户端时间,以查看结果是否在一个时间间隔内。伪代码如下:
longinterval=5 * 60 * 1000//time out long client time=request . get parameter(‘ client time ‘);长服务器时间=系统。当前内存();如果(server time-client time interval){ return new response(‘长于处理时间’)}
4. AppId机制
可以生成唯一的AppId,密钥可以使用字母和数字等特殊字符随机生成。生成唯一的AppId取决于实际情况,看是否需要全局唯一性;但是,最好让生成的标识具有以下属性,而不管它是否是全局唯一的:
趋势正在增加:这将在保存数据库时提供更好的索引性能;信息安全:尽量不要连续且容易找到规则;
生成全局唯一标识的常用方法包括雪花方法等。
5. 限流机制
常见的限流算法包括令牌桶限流、漏桶限流和计数器限流。
(1)令牌桶电流限制
令牌桶算法的原理是系统以一定的速率将令牌放入桶中,并在令牌填满时丢弃令牌。当请求到来时,令牌将首先从桶中取出。如果令牌可以取出,请求可以继续完成,否则服务将被等待或拒绝。令牌桶在一定程度上允许突发流量,只要有令牌就可以处理,一次支持多个令牌;
(2)漏桶限流
漏桶的原理是以固定的恒定速率流出请求,流入请求速率是任意的。当请求数量超过存储桶容量时,新请求等待或拒绝服务;可以看出漏桶会限制数据传输速度;
(3)Counter Current Limit
Counter是一种相对简单而粗糙的算法,主要用于限制总并发数,如数据库连接池、线程池和秒kill的并发数。如果在一定时间内请求的总数超过了设定的阈值,计数器将限制电流。
具体基于上述算法是如何实现的,Guava提供了基于令牌桶算法的RateLimiter工具类:
上述代码表示每秒只允许处理五个并发请求,并且上述方法只能用于单个应用请求流限制,而不能用于全流限制;此时,需要分布式限流,并且可以基于Redisla来实现。
6. 黑名单机制
为什么没有关于黑色和中号的讨论?我们可以为每个用户设置一个状态,如初始化状态、正常状态、黑色和中等状态、关闭状态等。或者我们可以通过分布式配置中心直接保存黑名单列表,并每次检查它是否在列表中。
7. 数据合法性校验
合法性验证包括:常规验证和业务验证;
总结
本文列出了几种常见的安全机制,包括数据加密、数据签名、时间戳机制、AppId机制、限流机制、黑名单机制和数据合法性检查。当然肯定还有其他方法,欢迎补充。
极牛网精选文章《如何设计一个安全的对外接口》文中所述为作者独立观点,不代表极牛网立场。如若转载请注明出处:https://geeknb.com/4605.html