保证接口数据安全的方案

保证接口数据安全的方案

数据加密,防止明文传输

不需要解密,只需要验证是否相同的

比如登录时的密码,可以在前端编码成 MD5 传输。MD5具有不可逆的性质,非常适合用来存储这些。

为了防止数据库泄露暴露 MD5 密码,或者希望更安全,可以对 MD5 加盐。

比如 MD5( password + salt ),salt 可以是每个用户唯一的,防止如果某个用户的密码被穷举破解出来了,不能使用现有的成果来类推其它用户的密码。

需要解密,使用原来的参数

使用 AES 对称加密算法,这个需要服务端和客户端都存储秘钥,如果不用暴露客户端,这种方案很合适。

使用 RSA 非对称加密,会生成私钥和公钥。

数据加签验签

加签

它可以保证数据在传输过程中不被篡改。

使用 MD5/ShA-256 对原始请求报文生成摘要,使用私钥对摘要加密,就得到了报文对应的数字签名。

将 报文原文和签名 一起发到接收方。

验签

接收方对原始数据以相同方法处理,得到摘要,使用对方提供的公钥对数字签名解密,判断两个摘要是否相同。就可以得知报文有没有被篡改过。

token 授权认证

非登录接口如何识别用户的身份?

可以在用户名密码登录接口中返回唯一 token。请求其它需要权限的接口必须带上此 token,服务端解析 token 验证身份,并检查 token 是否 过期。

此方式也可用于唯一设备登录,每个用户最后一次登录生成的 token 记录到 redis 缓存中,每次登陆都会覆盖掉旧的。接口请求时,服务端验证其 token 是否与服务端的一致,如果不一致,就提示用户重新登录。

另外关于身份验证错误的状态码参考网址

token 不存在或解析失败,token 过期等返回 401 错误

token 验证通过,但对资源没有访问的权限,返回 403 错误

时间戳 timestamp 超时

有些攻击者,不关心真实的数据,而是抓包后进行恶意请求,如 DOS 攻击。

可以引入时间戳 ,来保证接口安全,客户端每次请求都带上当前时间,求服务端时间与请求时间的时间差,大于一定时间如 2 分钟,则认为请求无效。

只加时间,很容易破解,无非每次请求时更新一下时间,可以在时间戳的基础上,与「数据加签验签」结合。

timestamp+nonce 防止重放攻击

nonce 指唯一的随机字符串,在客户端维护一个随机字符串 set,每次请求使用 timestamp+nonce,nonce 不能重复。

服务端也维护一个相同的 set,如果发现重复的 nonce 就是重复请求。 因为有 timestamp 仅接收 2分钟内的请求,所以服务端和客户端可以都只维护 2分钟内的 nonce ,以节省内存。

限流

可以从以下方面考虑

  • 每分钟可以接收多少次请求
  • 服务端最大能同时处理多少请求
  • 每个 IP, 1 分钟内最多请求次数

黑名单

对于黑名单的 IP,返回错误码

建议黑名单加上时间限制,对于明知是恶意的攻击,多长时间都可以

对于不确定,模棱两可,或只是小小的警告惩罚,可以设定有限的时间。

白名单

仅允许白名单内的 IP 访问

参数合法性效验

如手机号和身份证检测长度等是否合法。

枚举参数是否合法。

Licensed under CC BY-NC-SA 4.0
本文阅读量 次, 总访问量 ,总访客数
Built with Hugo .   Theme Stack designed by Jimmy