如何防止接口被恶意请求?添加时间戳检验?

文章介绍了如何通过Spring拦截器配合Redis实现接口防刷功能,使用时间戳校验位并设置访问次数限制,当达到上限时阻止恶意请求。同时,文章详细展示了如何添加注解和自定义拦截器的工作原理。

添加时间戳校验位

比如给客户端提供一个timestamp参数,值是13位的毫秒级时间戳,可以在第12位或者13位做一个校验位,通过一定的算法给其他12位的值做一个校验。

举例:现在实际时间是 1684059940123,我把前12位通过算法算出来校验位的值是9,参数则把最后一位改成9,即1684059940129,值传到服务端后通过前十二位也可以算出来值,来判断这个时间戳是不是合法的。

生成校验位的算法要确保前后端一致,比如校验位的值都取倒数第二位的值(可过滤掉90%)恶意请求。

添加拦截器防止接口恶意狂刷

其实也就是spring拦截器来实现。在需要防刷的方法上,加上防刷的注解,拦截器拦截这些注解的方法后,进行接口存储到redis中。当用户多次请求时,我们可以累积他的请求次数,达到了上限,我们就可以给他提示错误信息。

添加注解

@Target({ElementType.METHOD, ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface AccessLimit {

    int seconds();

    int maxCount();

}

自定义拦截器

public class SessionInterceptor extends HandlerInterceptorAdapter {

    private static final Logger logger = LoggerFactory.getLogger(SessionInterceptor.class);

    @Autowired

    private UserAuthService userAuthService;

&n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值