接口访问加密和限频方案

Posted tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口访问加密和限频方案相关的知识,希望对你有一定的参考价值。

需求:安全性要求较高的接口暴露到公网中,需要进行加密和限频.

案例:根据用户手机号查询用户ID,需要防止根据phone库非法扫接口,
1.返回uid加密:
采用RSA加密,私钥加密,公钥解密,为了混淆结果,无论有无uid都返回加密结果。当无结果会根据phone md5截取7位
作为伪号,使用另一私钥加密。如果公钥解密失败则说明无对应uid。
2.限频,根据key=access_token 50次每天。limit50; timeunit:day
public long incr(String key) {
long count = redisTemplate.opsForValue().increment(key, 1);
if (count == 1) {
// 暂时不考虑设置超时时间失败的情况
redisTemplate.expire(key, 1, timeUnit);
}
if (count > limit) {
// 超过临界值之后, 每次错误都延长记录有效期
redisTemplate.expire(key, 1, timeUnit);
}
return count;
}
public long getCountByKey(String key){
long count = redisTemplate.execute((RedisCallback<Long>) (conn) -> {
byte[] countStr = conn.get(key.getBytes(StandardCharsets.UTF_8));
if (countStr == null) {
return 0L;
}
return Long.parseLong(new String(countStr));
});
return count;
}
public void check(String key) {
if (getCountByKey(key) > limit) {
throw new TooManyFailsException();
}
}

以上是关于接口访问加密和限频方案的主要内容,如果未能解决你的问题,请参考以下文章

DRF框架中其他功能:认证权限限流

开放接口/RESTful/Api服务的设计和安全方案

Android接口安全 - RSA+AES混合加密方案

常用的接口限流算法

SpringBoot中如何灵活的实现接口数据的加解密功能?

性能提速:debounce(防抖)throttle(节流/限频)