You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何验证Vue3前端向Django REST API发送POST请求的来源合法性?

验证Django REST API注册请求来源及防恶意刷库方案

Origin头的局限性

  • 浏览器发起的跨域请求中,Origin头是浏览器自动生成且无法通过前端JS修改的,但对于curl、Postman等非浏览器工具,Origin头可以随意伪造。
  • 仅靠Origin验证只能拦截部分低级跨域请求伪造,但完全挡不住脚本批量请求或Selenium模拟的自动化操作,因此单独使用Origin验证是不安全的。

有效防恶意注册的组合方案

1. 人机验证(核心手段)

  • 集成图形验证码、滑动拼图、短信/邮箱验证码等:
    • 图形验证码:可以用django-simple-captcha库,前端在注册页面加载验证码,提交时将验证码内容一起发送,后端验证有效性。
    • 短信/邮箱验证码:用户输入手机号/邮箱后先发送验证码,后端存储验证码有效期,注册时校验验证码是否正确且未过期。这种方式能有效区分真实用户和自动化脚本。

2. 请求速率限制

  • 使用Django或DRF的速率限制机制:
    • DRF内置了AnonRateThrottle,可对匿名用户(未登录的注册请求)限制请求频率,比如设置为5/min(每分钟最多5次请求)。
    • 第三方库django-ratelimit可更灵活配置,比如按IP、手机号维度限制请求次数,即使脚本换IP,短时间内也无法发起大量请求。

3. CSRF防护(同域/带Cookie场景)

  • 如果前端和后端同域,或跨域请求需携带Cookie,必须启用DRF的CSRF防护:
    • 前端需从后端获取CSRF令牌,在请求头中携带X-CSRFToken;后端通过csrf_exempt排除不需要防护的视图,其他视图自动校验令牌。
    • 这能防止跨站请求伪造,但对直接调用API的脚本防护有限,需配合其他手段。

4. 前端行为校验(辅助手段)

  • 添加隐藏字段:在注册表单中加入一个隐藏的input,前端通过JS在用户点击提交按钮时才填充特定值(比如当前时间戳的哈希),后端校验该字段是否存在且符合规则。低级脚本如果未模拟这个JS交互,会被拦截。
  • 校验页面停留时间:后端记录请求的时间戳,和前端提交的页面加载时间对比,过滤掉停留时间过短(比如小于2秒)的请求,排除快速批量提交的脚本。

5. 账号激活机制

  • 用户注册后,必须通过邮箱或手机号验证才能激活账号:
    • 后端生成激活链接或验证码,发送到用户填写的邮箱/手机号,只有验证通过后账号才能正常使用。即使脚本刷了大量注册请求,未激活的账号无法使用,降低恶意注册的实际影响。

内容的提问来源于stack exchange,提问作者8SIXSector

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 05:25:56