APP、前后端分离、后端项目之间调用都涉及接口调用,传输的时候如何防止被抓包、偷窥、伪造、超时、重放
解决方案:
token授权认证,防止未授权用户获取数据
时间戳,防止超时重放
签名,防止数据篡改
HTTPS,防止数据明文传输
Token:
就是一个经过加密或签名的临时令牌,需要设置过期时间,每次请求都校验token
时间戳:
如果时间差大于一定时间(比如:1分钟),则认为该请求失效,防止超时重放
签名:
比如queryString、header、body,将它们按顺序拼接成一个字符串,然后使用秘钥签名,防止数据被篡改。如果传输不敏感信息,仅仅为了防篡改,可以使用签名
防重放:
每次请求生成一个唯一ID,存放到缓存中,如果下次再使用相同的ID请求就拒绝
HTTPS:
HTTP协议是以明文方式发送内容,因此不适合传输一些敏感信息
HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为客户端和服务器之间的通信加密
场景:
APP
APP比较特殊,攻击者可以反编译源码,所以不可以在APP中存放秘钥,曾经见过有公司APP使用OAuth的Client Credential授权方式,将ClientID和ClientSecret存放在APP端,app启动时获取Token,肯定不安全
应该使用APP使用者的用户名密码登录获取Token