Tiredful API限流绕过实战指南Throttling机制为何防不住批量请求【免费下载链接】Tiredful-APIAn intentionally designed broken web application based on REST API.项目地址: https://gitcode.com/gh_mirrors/ti/Tiredful-APITiredful API 是一款专为安全教学设计的 REST API 漏洞靶场它的限流Throttling挑战场景能让新手直观看到限流配置看似合理为何仍防不住批量请求本文将用一次触发 429 轻松绕过的实战带你理解 Django REST Framework 限流机制的工作原理、常见配置陷阱以及生产环境应该如何正确配置限流。一、为什么用 Tiredful API 学限流绕过大多数 REST API 教程只讲怎么加限流很少讲限流是怎么被绕过的。Tiredful API 反其道而行——它是一个故意写得不安全的 Web 应用内置了限流、越权访问、SQL 注入等多个经典场景官方场景说明见 trains/templates/trains/index.html。它的限流挑战目标很明确Aim: Force server to respond with HTTP response code 429.强制服务器返回 HTTP 429换句话说先学会触发限流再学会批量绕过它。这正是安全测试中最真实的攻击视角。二、Throttling 机制的工作原理Tiredful API 基于 Django Django REST FrameworkDRF构建限流全局配置在Tiredful_API/settings.py中匿名用户anon10 次/天已登录用户user20 次/小时DRF 的 Throttling 机制本质是每个请求进入时根据throttle scope如user、anon查找对应策略计算请求者的身份标识ident已登录用户是用户 ID匿名请求通常没有标识或按 IP 处理在缓存中记录该身份在时间窗口内的请求数超限则直接返回429 Too Many Requests。这套逻辑看起来无懈可击但问题出在身份标识这一步。三、漏洞所在UserRateThrottle 只管登录用户查看火车票务接口trains/views.py的限流装饰器throttle_classes([UserRateThrottle]) def get_status(request):注意它用的是UserRateThrottle——它只对已认证用户计数。这带来两个典型陷阱匿名请求不计入限制没有登录态的请求拿不到用户标识限流器直接放行批量脚本可以无限制地调用限流只挂在单一接口其他接口如library/views.py、exams/views.py完全没有 throttle 装饰器限流成了选择性设防。所以答案呼之欲出批量请求只要避开已登录用户这个计数身份Throttling 机制就形同虚设。四、实战触发 429再批量绕过整个实验在本地跑一遍即可仓库克隆地址https://gitcode.com/gh_mirrors/ti/Tiredful-API克隆后执行python manage.py runserver启动服务。第 1 步登录并触发限流用普通用户身份连续调用POST /api/v1/trains/挑战页会给出可用的 PNR 号。按 20 次/小时的配置短时间连续发送 21 个请求后第 21 个请求收到HTTP 429——限流生效了。第 2 步批量绕过方式 A匿名轰炸—— 去掉登录态不带 Token用简单循环对接口发起数百次匿名请求全部返回 200限流计数纹丝不动方式 B多账号轮换—— 注册/切换多个用户身份每个身份都吃不满配额聚合起来的请求量远超单用户限制。两种方式都验证了同一件事只按用户身份计数的限流挡不住匿名流量和多账号批量请求。五、如何正确配置 API 限流从靶场案例出发生产环境的限流应满足以下清单配置要点说明✅ 匿名也要限流使用AnonRateThrottle或自定义按 IP 计数的策略堵住匿名批量请求✅ 按接口分级限流敏感接口单独设置更严格的 scope避免只挂一个接口✅ 全局限流兜底DEFAULT_THROTTLE_CLASSES中启用全局默认策略✅ 使用共享缓存多实例部署时限流计数要落到 Redis 等共享缓存否则各节点各算各的✅ 监控 429 日志频繁出现 429 或大量匿名高频请求时应告警限流的本质不是防住攻击而是把攻击成本抬高到无利可图。只要留下匿名不计费这类缺口攻击者总会批量走那条路。六、小结Tiredful API 的限流场景证明Throttling 机制防住的是登录用户的手速防不住批量匿名请求根源在于UserRateThrottle只统计已认证身份且限流装饰器未覆盖全部接口新手做 API 安全自查时记住口诀匿名要限、接口要全、缓存要共享、日志要监控。动手触发一次 429、再绕过它你对 API 限流的理解会超过十篇文档。这个靶场正是为此而生。【免费下载链接】Tiredful-APIAn intentionally designed broken web application based on REST API.项目地址: https://gitcode.com/gh_mirrors/ti/Tiredful-API创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考