admin 管理员组

文章数量: 1087139


2024年3月22日发(作者:php开发微信小程序客服功能)

API 接口应该如何设计?如何保证安全?如何签名?如何防重?

在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如

何保证数据在传输过程中的安全呢(防窃取)?除了https的协议之外,能

不能加上通用的一套算法以及规范来保证传输的安全性呢?

下面我们就来讨论下常用的一些API设计的安全方法,可能不一定是最好

的,有更牛逼的实现方式,但是这篇是我自己的经验分享.

一、token 简介

Token:访问令牌access token, 用于接口中, 用于标识接口调用者的身

份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需

要先向服务器端申请一个接口调用的账号,服务器会给出一个appId和一个

key, key用于参数签名使用,注意key保存到客户端,需要做一些安全处理,

防止泄露。

Token的值一般是UUID,服务端生成Token后需要将token做为key,

将一些和token关联的信息作为value保存到缓存服务器中(redis),当一个请

求过来后,服务器就去缓存服务器中查询这个Token是否存在,存在则调用接

口,不存在返回接口错误,一般通过拦截器或者过滤器来实现,Token分为两

种:

API Token(接口令牌): 用于访问不需要用户登录的接口,如登录、注册、

一些基本数据的获取等。获取接口令牌需要拿appId、timestamp和sign

来换,sign=加密(timestamp+key)

USER Token(用户令牌): 用于访问需要用户登录之后的接口,如:获取

我的基本信息、保存、修改、删除等操作。获取用户令牌需要拿用户名和密

码来换

关于Token的时效性:token可以是一次性的、也可以在一段时间范围内

是有效的,具体使用哪种看业务需要。

一般情况下接口最好使用https协议,如果使用http协议,Token机制只是

一种减少被黑的可能性,其实只能防君子不能防小人。

一般token、timestamp和sign 三个参数会在接口中会同时作为参数传

递,每个参数都有各自的用途。

二、timestamp 简介

1、timestamp: 时间戳,是客户端调用接口时对应的当前时间戳,时间戳用于

防止DoS攻击。

当黑客劫持了请求的url去DoS攻击,每次调用接口时接口都会判断

服务器当前系统时间和接口中传的的timestamp的差值,如果这个差值

超过某个设置的时间(假如5分钟),那么这个请求将被拦截掉,如果在设

置的超时时间范围内,是不能阻止DoS攻击的。timestamp机制只能减

轻DoS攻击的时间,缩短攻击时间。如果黑客修改了时间戳的值可通过

sign签名机制来处理。

2、DoS

DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被

称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的

DoS攻击有计算机网络带宽攻击和连通性攻击。


本文标签: 接口 攻击 需要 时间 用于