【未来虫教育】揭秘安全对外接口设计新趋势

时间: 2025-03-15 05:10:23 |   作者: 血细胞分析仪

  个人觉得安全措施大体来看主要在两个方面,一方面就是如何保证数据在传输过程中的安全性,另一个方面是数据已到达服务器端,服务器端怎么来识别数据,如何不被攻击;下面具体看看都有哪些安全措施。

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

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

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

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

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

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

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

  以上大体介绍了一下常用的一些接口安全措施,当然可能还有别的我不知道的方式,希望我们大家补充,下面看看以上这一些方法措施,具体如何实现。

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

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

  对称加密和非对称加密代码实现,jdk 提供了相关的工具类可以直接用,此处不过多介绍。关于 https 如何配置使用相对来说复杂一些,可以借鉴本人的之前的文章HTTPS 分析与实战。

  数据签名使用比较多的是 md5 算法,将要提交的数据通过某种方式组合成一个字符串,然后通过 md5 生成一段加密字符串,这段加密字符串就是数据包的签名。

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

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


联络帝迈
返回
顶部