如何防止接口被恶意刷量?

为了防止被恶意刷量,本能地想到要用限流。

当然,除了限流,还有其他的一些方式:

1.在前后端约定一套加密算法和一个密钥

在前端把所有参数按照字母进行排序,再加上密钥生成一个签名,将其放在请求头里传给后端。

在后端用和前端一样的规则生成一个签名,如果两个签名对不上,很明显参数在传输的过程中被篡改了,可以直接拒绝,从而防止攻击者随意地修改参数来刷接口。

2.如果攻击者截获可一个合法的请求包,在改不了参数的懊恼下,他直接疯狂地重复发送这个包。这种攻击方式的解决办法是:

在后端先对时间戳进行校验,如果是超过了60秒的请求,则直接丢弃;

如果请求是在60秒以内的,再检查随机数是否在Redis中已经存在,如果是已经存在,说明这是个重复请求,直接拦截掉。

3.当系统检测到某个用户存在频率稍高,但是还没到限流阈值的异常行为或者在进行注册、领券等较为敏感的操作时,强制弹出滑块验证码,从而对人和脚本进行区分。

4.如果发现某个IP存在于IP黑名单或者用户的ID黑名单中,可以直接在网关层对这个IP进行封禁,不让它进入到业务层。

相关推荐
码农小卡拉4 分钟前
深入解析Spring Boot文件加载顺序与加载方式
java·数据库·spring boot
向上的车轮12 分钟前
为什么.NET(C#)转 Java 开发时常常在“吐槽”Java:checked exception
java·c#·.net
Dragon Wu13 分钟前
Spring Security Oauth2.1 授权码模式实现前后端分离的方案
java·spring boot·后端·spring cloud·springboot·springcloud
island131416 分钟前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构任务的 Stream 调度机制
开发语言·人工智能·深度学习·神经网络
跳动的梦想家h19 分钟前
环境配置 + AI 提效双管齐下
java·vue.js·spring
坚持就完事了21 分钟前
Java中的集合
java·开发语言
魔芋红茶25 分钟前
Python 项目版本控制
开发语言·python
wjhx30 分钟前
QT中对蓝牙权限的申请,整理一下
java·数据库·qt
YCY^v^34 分钟前
JeecgBoot 项目运行指南
java·学习
云小逸40 分钟前
【nmap源码解析】Nmap OS识别核心模块深度解析:osscan2.cc源码剖析(1)
开发语言·网络·学习·nmap