【随便写写】接口通信安全

一、接口安全实现方式

1.1数据加密

常见方式:对关键字段进行加密。例如,在登录的接口中对密码进行加密。加密算法有对称加密(如AES)、非对称加密(如RSA)或者哈希算法处理(如MD5)。

1.1.1 对称加密

对称加密:加密和解密都使用相同密钥的加密算法。

对称加密算法:

1、DES:密钥长度64位,其中有8位用于校验(第8、16、24、32、40、48、56、64位是校验位)。已经被破解,不再安全,基本没有企业再使用。加密速度快,适合大量数据,处理数据后可复原。

2、DESede(三重DES):早于AES出现代替DES。计算密钥时间太长,加密效率不高,所以基本上也不适用。

3、AES:最常用的对称加密算法。密钥建立时间短,灵敏性好,内存需求低。密钥长度128/192/256,其中192与256需要配置无政策限制权限文件。

4、IDEA:常用的电子邮箱算法,工作模式只有ECB,密钥长度有128位。

5、PBE:综合了消息摘要算法和对称加密算法,最常见的是PBEWithMD5AndDES。不安全,也不推荐使用。

1.2.1 非对称加密

非对称加密算法:需要有公钥和私钥两个密钥,它们是成对出现的。一般使用公钥进行加密,使用私钥进行解密。

非对称加密算法:

1、RSA:基于包含在大数分解中的复杂性,应用源于对两个大数乘积的巨大积分分量的因式分解。优点在于保密性较好,所有人都可以使用公钥进行加密,但只有持有私钥的人才能正确破解。使用两个较大的质数计算出的公钥和私钥,以目前的机器条件,几乎不可能在短时间内破译出来。缺点就是解密花费时间长、速度慢,只适合对少量数据进行加密。常用于保密性和认证性的场景,如数字签名。

2、DSA:安全性和RSA差不多,常用于数字签名算法。生成签名的速度快,验证速度很慢,加密时更慢,正好与RSA相反。现在有被破解的可能,不推荐使用。

3、ECC:基于椭圆曲线数学的公开密钥加密算法。现在超级计算机的运算能力在不断增强,像是DSA和RSA加密算法必须保证更长的密钥来保证安全性,这与需要更短的密钥来保证通信效率相互矛盾。ECC主要优势是可以使用更小的密钥并提供相当高等级的安全。ECC164位的密钥产生一个安全级,相当于RSA 1024位密钥提供的保密强度,而且计算量较小,处理速度更快,存储空间和传输带宽占用较少。目前我国居民二代身份证正在使用 256 位的椭圆曲线密码,虚拟货币比特币也选择ECC作为加密算法。由于它是基于椭圆曲线的离散对数问题,曲线的选择很复杂。再加上是由美国国家安全局NSA指定标准(怕有后门)专利问题(申请人太多)的问题,很难推行。

4、DH:DH 算法其实也叫作 Diffie - Hellman 密钥交换协议,是一个不安全的秘钥共享网络协议,无法避免中间人攻击。

1.2数据加签验签

https加密数据并不是绝对安全的。https加密的部分只是在外网,然后有很多服务是内网相互跳转的,加签也可以在这里保证不被中间人篡改,所以一般转账类安全性要求高的接口开发,都需要加签验签。

加签:用Hash算法(如MD5,或者SHA-256)把原始请求参数生成报文摘要,然后用私钥对这个摘要进行加密,就得到报文对应的数字签名sign。通常请求方会把数字签名和报文原文一并发送给接收方。

验签:接收方拿到原始报文和数字签名(sign)后,用同一个Hash算法(比如都用MD5)从报文中生成摘要A。另外,用对方提供的公钥对数字签名进行解密,得到摘要B,对比A和B是否相同,就可以得知报文有没有被篡改过。

1.3 token授权认证机制

用户在登录成功后会获得一个token。用户每次请求都会带着token,只有token验证正确,才表明是合法请求。

可以采用RSA+DES+BASE64的方式对jwt进行加密。

1.4时间戳timestamp超时机制

用来防止恶意请求(比如DOS攻击),以搞垮你的系统。

用户每次请求都带上当前时间的时间戳timestamp,服务端接收到timestamp后,解密,验签通过后,与服务器当前时间进行比对,如果时间差大于一定时间 (比如3分钟),则认为该请求无效。

1.5 timestamp+nonce方案防止重放攻击

防止在时间差内,黑客进行的重放攻击。

nonce指唯一的随机字符串,用来标识每个被签名的请求。我们可以将每次请求的nonce参数存储到一个“set集合”中,或者可以json格式存储到数据库或缓存中。每次处理HTTP请求时,首先判断该请求的nonce参数是否在该“集合”中,如果存在则认为是非法请求。

1.6 限流机制

防止用户恶意频繁调用接口。

常用的限流算法有令牌桶和漏桶算法。可以使用Guava的RateLimiter单机版限流,也可以使用Redis分布式限流,还可以使用阿里开源组件sentinel限流。比如说,一分钟可以接受多少次请求。

1.7黑白名单机制

1.8数据参数脱敏、合法性校验

二、第三方登录

微信扫码登录:

使用了OAuth2.0,用户扫码确认后,微信开放平台会先给第三方应用一个临时票据(code)。第三方应用拿着这个code,再携带微信授权的appid和appserect返回给微信开放平台来换取access_token。

支付宝登录:

使用非对称加密的方式,由支付宝密钥生尘器或者Open SSL生成密钥。支付宝会用SHA256withRSA算法或者公钥证书进行接口调用时的验签。安全方式有加签验签(必填)、网关、IP白名单、接口内容加密等。

钉钉登录:

和微信类似。

三、OAuth2.0

是一种开放授权的机制。在资源所有者同意客户端访问资源时,会给客户端颁发令牌。客户端拿着这个令牌可以访问资源所有者的资源,无需资源所有者输入登录。

授权方式分为四种:授权码、隐藏式、密码式、客户端凭证。

简单来说就是,项目中有前后端的话使用授权式(使用code)和密码式(用账号密码去请求获取token),只有前端使用隐藏式(没办法发送code,直接获取token),只有后端用客户端凭证。扫码登陆用的就是授权码,账号密码登录用的是密码式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值