当前位置: 首页 > article >正文

【架构实战】API接口防刷与限流策略

一、接口防刷概述接口防刷是保护系统安全的重要手段常见攻击暴力破解密码恶意爬虫刷接口抽奖、秒杀CC攻击二、限流算法1. 计数器算法ComponentpublicclassCounterRateLimiter{publicbooleantryAcquire(Stringkey,intlimit,intwindow){StringredisKeyratelimit:key;LongcountredisTemplate.opsForValue().increment(redisKey);if(count1){redisTemplate.expire(redisKey,window,TimeUnit.SECONDS);}returncountlimit;}}2. 滑动窗口算法ComponentpublicclassSlidingWindowRateLimiter{publicbooleantryAcquire(Stringkey,intlimit,intwindow){longnowSystem.currentTimeMillis();StringredisKeyratelimit:sliding:key;// 移除窗口外的请求redisTemplate.opsForZSet().removeRangeByScore(redisKey,0,now-window*1000);// 当前请求数LongcountredisTemplate.opsForZSet().zCard(redisKey);if(countlimit){returnfalse;}// 添加当前请求redisTemplate.opsForZSet().add(redisKey,now,now);redisTemplate.expire(redisKey,window*2,TimeUnit.SECONDS);returntrue;}}3. 令牌桶算法ComponentpublicclassTokenBucketRateLimiter{publicbooleantryAcquire(Stringkey,intbucketSize,intrefillRate){StringredisKeytokenbucket:key;// 获取令牌LongtokensredisTemplate.opsForValue().decrement(redisKey:tokens);if(tokensnull){// 初始化令牌桶redisTemplate.opsForValue().set(redisKey:tokens,bucketSize-1);redisTemplate.opsForValue().set(redisKey:last,System.currentTimeMillis());returntrue;}if(tokens0){// 令牌不足returnfalse;}returntrue;}}三、分布式限流1. Lua脚本限流ComponentpublicclassLuaRateLimiter{privatestaticfinalStringSCRIPT local key KEYS[1] local limit tonumber(ARGV[1]) local window tonumber(ARGV[2]) local current redis.call(INCR, key) if current 1 then redis.call(EXPIRE, key, window) end if current limit then return 0 end return 1 ;publicbooleantryAcquire(Stringkey,intlimit,intwindow){DefaultRedisScriptLongscriptnewDefaultScript();script.setScriptText(SCRIPT);LongresultredisTemplate.execute(script,Collections.singletonList(key),String.valueOf(limit),String.valueOf(window));returnresult!nullresult1;}}2. Sentinel限流ServicepublicclassSentinelRateLimiter{SentinelResource(valuegetOrder,blockHandlerblockHandler)publicOrdergetOrder(LongorderId){returnorderService.getById(orderId);}publicOrderblockHandler(LongorderId,BlockExceptione){thrownewBusinessException(请求过于频繁请稍后重试);}}// 配置限流规则ConfigurationpublicclassSentinelConfig{PostConstructpublicvoidinitRules(){ListFlowRulerulesnewArrayList();FlowRulerulenewFlowRule();rule.setResource(getOrder);rule.setGrade(RuleConstant.FLOW_GRADE_QPS);rule.setCount(100);// 每秒100次rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT);rules.add(rule);FlowRuleManager.loadRules(rules);}}四、接口防刷策略1. 签名验证ComponentpublicclassSignValidator{Value(${app.secret})privateStringappSecret;publicbooleanvalidateSign(MapString,Stringparams,Stringsign){// 1. 排序参数StringsortedParamsparams.entrySet().stream().filter(e-!e.getKey().equals(sign)).sorted(Map.Entry.comparingByKey()).map(e-e.getKey()e.getValue()).collect(Collectors.joining());// 2. 拼接密钥StringsignStrsortedParamskeyappSecret;// 3. MD5签名StringcalculatedSignMD5(signStr).toUpperCase();returncalculatedSign.equals(sign.toUpperCase());}}2. 时间戳防重放ComponentpublicclassTimestampValidator{privatestaticfinallongMAX_TIMESTAMP_DIFF300000;// 5分钟publicbooleanvalidateTimestamp(longtimestamp){longnowSystem.currentTimeMillis();longdiffMath.abs(now-timestamp);returndiffMAX_TIMESTAMP_DIFF;}}3. 唯一请求IDComponentpublicclassIdempotentChecker{publicbooleancheck(StringrequestId){Stringkeyidempotent:requestId;BooleanresultredisTemplate.opsForValue().setIfAbsent(key,1,5,TimeUnit.MINUTES);returnBoolean.TRUE.equals(result);}}五、验证码防护1. 图形验证码ServicepublicclassCaptchaService{publicCaptchagenerateCaptcha(){// 生成随机字符串StringcodegenerateRandomCode(4);// 生成图片BufferedImageimagegenerateImage(code);// 生成唯一IDStringcaptchaIdUUID.randomUUID().toString();// 存入RedisredisTemplate.opsForValue().set(captcha:captchaId,code.toLowerCase(),5,TimeUnit.MINUTES);returnnewCaptcha(captchaId,image);}publicbooleanverify(StringcaptchaId,Stringcode){StringcachedCode(String)redisTemplate.opsForValue().get(captcha:captchaId);if(cachedCodenull){returnfalse;}booleanvalidcachedCode.equalsIgnoreCase(code);if(valid){redisTemplate.delete(captcha:captchaId);}returnvalid;}}2. 短信验证码ServicepublicclassSmsCodeService{publicvoidsendSmsCode(Stringphone){// 检查发送频率StringsendKeysms:send:phone;LongsendCountredisTemplate.opsForValue().increment(sendKey);if(sendCount!nullsendCount5){thrownewBusinessException(发送过于频繁请1小时后再试);}if(sendCount1){redisTemplate.expire(sendKey,1,TimeUnit.HOURS);}// 生成6位验证码StringcodeString.format(%06d,newRandom().nextInt(1000000));// 存入RedisStringcodeKeysms:code:phone;redisTemplate.opsForValue().set(codeKey,code,5,TimeUnit.MINUTES);// 发送短信smsClient.send(phone,验证码code);}}六、IP限流ComponentpublicclassIPRateLimiter{publicbooleantryAcquire(Stringip,Stringapi,intlimit,intwindow){Stringkeyip:ratelimit:ip:api;LongcountredisTemplate.opsForValue().increment(key);if(count1){redisTemplate.expire(key,window,TimeUnit.SECONDS);}if(countlimit){// 封禁IPblockIP(ip);returnfalse;}returntrue;}privatevoidblockIP(Stringip){StringblockKeyip:block:ip;redisTemplate.opsForValue().set(blockKey,1,1,TimeUnit.HOURS);}}七、总结接口防刷是系统安全的重要组成限流算法计数器、滑动窗口、令牌桶分布式限流Lua脚本、Sentinel签名验证防止请求被篡改验证码防止机器攻击最佳实践多层限流网关应用数据库根据业务场景选择限流策略做好监控和告警个人观点仅供参考

相关文章:

【架构实战】API接口防刷与限流策略

一、接口防刷概述 接口防刷是保护系统安全的重要手段: 常见攻击: 暴力破解密码恶意爬虫刷接口(抽奖、秒杀)CC攻击 二、限流算法 1. 计数器算法 Component public class CounterRateLimiter {public boolean tryAcquire(String key…...

【曼博解析】Polysciences 24765 vs 23966:明星PEI转染试剂对比指南

24765 vs 23966:Polysciences PEI MAX与PEI 25K转染试剂,谁才是细胞转染真神? 摘要:从化学结构(线性vs分支状)、分子量大小、到应用场景(病毒包装vs蛋白表达)以及细胞毒性&#xff…...

Unity UI圆角效果实战:从Shader原理到高级应用完整指南

Unity UI圆角效果实战:从Shader原理到高级应用完整指南 【免费下载链接】Unity-UI-Rounded-Corners These components and shaders allow you to add rounded corners to UI elements! 项目地址: https://gitcode.com/gh_mirrors/un/Unity-UI-Rounded-Corners …...

OpenClaw 大结局——接入个人微信厮

本课概览 Microsoft Agent Framework (MAF) 提供了一套强大的 Workflow(工作流) 框架,用于编排和协调多个智能体(Agent)或处理组件的执行流程。 本课将以通俗易懂的方式,帮助你理解 MAF Workflow 的核心概念…...

论文解读:Adam定律揭示大模型最爱高频词

AI性能的天花板,是由数据决定的。这句话,每个人都知道。但"好数据"的定义,长期以来只有三个维度:准确、丰富、无噪声。没有人认真追问过第四个维度——当数据语义完全相同,只是措辞不同时,哪个更…...

Taskbar11:3个步骤解锁Windows 11任务栏完全自定义能力

Taskbar11:3个步骤解锁Windows 11任务栏完全自定义能力 【免费下载链接】Taskbar11 Change the position and size of the Taskbar in Windows 11 项目地址: https://gitcode.com/gh_mirrors/ta/Taskbar11 你是否厌倦了Windows 11默认的任务栏布局&#xff1…...

浙江金华车间酷热难挡?蒸发冷省电空调能否解决降温难题?

浙江金华的夏季,车间内酷热难挡是许多企业面临的难题。高温不仅让员工工作体验变差,还可能影响生产效率。这时,蒸发冷省电空调成为备受关注的解决方案。蒸发冷省电空调的制冷原理有其独特之处。它需要压缩机、制冷剂进行内循环制冷。压缩机作…...

DDD难落地?就让AI干吧! - cleanddd-skills介绍槐

AI训练存储选型的演进路线 第一阶段:单机直连时代 早期的深度学习数据集较小,模型训练通常在单台服务器或单张GPU卡上完成。此时直接将数据存储在训练机器的本地NVMe SSD/HDD上。 其优势在于IO延迟最低,吞吐量极高,也就是“数据离…...

吃灰安卓机变身 OpenClaw 服务器 — 完整手册乙

前言 在使用 kubectl get $KIND -o yaml 查看 k8s 资源时,输出结果中包含大量由集群自动生成的元数据(如 managedFields、resourceVersion、uid 等)。这些信息在实际复用 yaml 清单时需要手动清理,增加了额外的工作量。 使用 kube…...

2026年主流会议录音转写工具大横评全场景准确率实测对比,谁才是职场人首选的效率王者?

作为折腾过几十款效率工具的老油条,最近为了搞定自媒体团队的访谈整理、视频转字幕需求,我把2026年市面上主流的5款录音转写工具全测了一遍,踩了一堆坑之后可以明明白白说:听脑AI是同类工具中综合体验最好的,不管是准确…...

nomic-embed-text-v2-moe GPU算力利用:A10单卡并发16路请求的稳定性压测报告

nomic-embed-text-v2-moe GPU算力利用:A10单卡并发16路请求的稳定性压测报告 1. 引言:当嵌入模型遇上高并发挑战 最近在折腾一个多语言检索项目,需要找一个既强大又高效的文本嵌入模型。试了一圈,最终锁定了nomic-embed-text-v2…...

VideoAgentTrek-ScreenFilter API接口全解析:参数、返回值与错误码指南

VideoAgentTrek-ScreenFilter API接口全解析:参数、返回值与错误码指南 最近在折腾一个视频内容审核的项目,需要自动过滤掉一些不合适的画面。找了一圈,发现VideoAgentTrek-ScreenFilter这个模型挺对路,它专门用来分析视频内容&a…...

CMIP6实战指南:AI驱动的降尺度技术与区域气候影响深度解析

1. CMIP6与AI降尺度技术入门指南 当我们需要研究某个城市未来50年的气温变化时,全球气候模型(GCM)给出的数据往往像一张模糊的低像素照片——你能看出大概轮廓,但看不清细节。这就是CMIP6数据面临的典型问题:它的空间分…...

如何构建个人数字图书馆:知识星球内容永久保存完整方案

如何构建个人数字图书馆:知识星球内容永久保存完整方案 【免费下载链接】zsxq-spider 爬取知识星球内容,并制作 PDF 电子书。 项目地址: https://gitcode.com/gh_mirrors/zs/zsxq-spider 你是否曾经为知识星球上的优质内容无法永久保存而焦虑&…...

Xinference-v1.17.1在嵌入式开发中的应用:基于Keil5的AI模型部署

Xinference-v1.17.1在嵌入式开发中的应用:基于Keil5的AI模型部署 1. 引言 嵌入式设备越来越需要AI能力,但传统方法往往受限于计算资源和内存大小。Xinference-v1.17.1作为一个高效的AI推理框架,为嵌入式开发带来了新的可能。通过Keil5这样的…...

数据摄取构建模块简介(预览版)(二)僬

Qt是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本笔记将重点介绍QSpinBox数值微调组件的常用方法及灵活应用。…...

如何在5分钟内为视频自动生成专业字幕:VideoSrt开源工具深度指南

如何在5分钟内为视频自动生成专业字幕:VideoSrt开源工具深度指南 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows 还在为视…...

RabbitMQ消费者处理失败

1. 原生 RabbitMQ 机制:依赖 Ack 和“丢回去”(Requeue) RabbitMQ 服务端本身没有内置“最多重试 N 次然后丢弃”这种复杂的本地计数机制。它主要依赖**消息确认机制(ACK)**来保证消息不丢失。 当消费者处理失败时&…...

高效CAJ转PDF工具:一站式解决学术文献格式转换难题

高效CAJ转PDF工具:一站式解决学术文献格式转换难题 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换,成功与否,皆是玄学。 项目地址: https://gitcode.com/gh_mi…...

Wonder3D终极指南:如何用一张图片快速创建专业3D模型

Wonder3D终极指南:如何用一张图片快速创建专业3D模型 【免费下载链接】Wonder3D Single Image to 3D using Cross-Domain Diffusion for 3D Generation 项目地址: https://gitcode.com/gh_mirrors/wo/Wonder3D 还在为复杂的3D建模软件而烦恼吗?Wo…...

AI原生研发能力评估体系(2026权威实测版):覆盖LLM编译器、Agent工作流、RAG-Native架构等9大新兴栈

第一章:AI原生软件研发技术雷达图2026版全景概览 2026奇点智能技术大会(https://ml-summit.org) 2026版AI原生软件研发技术雷达图基于全球327个生产级AI应用项目、18家头部云厂商平台能力评估及41项开源工具链实测数据构建,覆盖模型即服务(M…...

fre:ac音频转换器:你的数字音乐整理终极方案

fre:ac音频转换器:你的数字音乐整理终极方案 【免费下载链接】freac The fre:ac audio converter project 项目地址: https://gitcode.com/gh_mirrors/fr/freac 你是否曾为杂乱无章的音乐文件而烦恼?或是面对不同设备间的格式兼容问题束手无策&am…...

深入探索Linux Test Project:专业级Linux系统测试框架完全指南

深入探索Linux Test Project:专业级Linux系统测试框架完全指南 【免费下载链接】ltp Linux Test Project (mailing list: https://lists.linux.it/listinfo/ltp) 项目地址: https://gitcode.com/gh_mirrors/ltp/ltp Linux Test Project(LTP&#…...

BR实用操作

文章目录B&R 4.3下载安装B&R 4.3下载开始安装安装结束注意点Upgrdate 安装注册授权Could not find Automation Runtime direcotry N3.34 报错B&R 修改模拟ip删除temp文件默认连接虚拟 onine修改ipBR冗余配置BR模拟配置BR模拟BR授权OPC UA开启和端口设置OPC UA上传配…...

密码学-背包密码举例说明

题目 超递增的背包:(3,5,10,23)将此作为私钥,模数n 47,乘数逆元m - 1 6。 (乘数m 8, 8*6 mod 47 1) 以二进制方式解密文C1 20,C2 29。 解题 发送方 公钥是常规包&a…...

golang 开发环境搭建

环境变量 export GOROOT/usr/local/go export GOPATH$HOME/go export PATH$PATH:$GOROOT/bin:$GOPATH/bin打成Linux可执行的包 ## SET GOOSlinux SET GOARCHamd64 go build -o abc-demo-linux ....

AXI基础知识学习

1、AXI通道主从之间5个通信通道:写操作使用如下通道:(1)主——>从,主使用AW通道发送写地址,主使用W通道发送数据;(2)从——>主,写操作完成之后&#xf…...

告别定时器中断!用RTA-OS硬件计数器实现超低功耗任务调度(AUTOSAR OS实战)

汽车电子低功耗革命:基于RTA-OS硬件计数器的精准调度实战 在汽车电子控制单元(ECU)开发中,静态功耗优化一直是工程师面临的棘手难题。传统基于SysTick的周期性中断方案就像一盏永不熄灭的指示灯,即使系统处于空闲状态也…...

MambaOut部署指南:本地、云端和边缘设备的完整解决方案

MambaOut部署指南:本地、云端和边缘设备的完整解决方案 【免费下载链接】MambaOut MambaOut: Do We Really Need Mamba for Vision? (CVPR 2025) 项目地址: https://gitcode.com/gh_mirrors/ma/MambaOut MambaOut是一个高效的计算机视觉模型,它通…...

3分钟解锁B站缓存视频:m4s-converter无损转换指南

3分钟解锁B站缓存视频:m4s-converter无损转换指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾为B站下架的视频感到惋惜&…...