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

无登录机制的公开Flask REST API如何限制仅允许指定前端访问?

首先需要明确:由于前端代码是公开运行在用户侧的,不存在100%阻止第三方调用API的方案,所有防护手段的核心都是提高破解成本,过滤掉99%的普通爬虫和无技术能力的恶意访问者,足够满足站点初期的使用需求。可按优先级落地以下方案:

基础防护(低成本过滤80%以上的非法请求)

  • 严格配置服务端CORS规则,上线后仅允许你的前端域名跨域访问,禁止使用*通配符。该方案仅能阻止浏览器环境下的普通跨域请求,虽然可以通过改请求头绕过,但配置成本极低,是第一层基础过滤。
  • 服务端校验请求的Origin和Referer请求头,仅允许来源为你的前端域名的请求通过,不符合规则直接返回403。同样可被高阶爬虫绕开,但可以过滤掉所有小白的直接调用请求。

动态签名校验(核心防护,大幅提高逆向门槛)

这一方案比固定token安全性高很多,不会出现固定密钥被抓包后永久泄露的问题:

  • 前后端提前约定一套签名生成规则,例如:将当前10位时间戳 + 预设的混淆字符串 + 请求路径 + 所有请求参数按固定顺序拼接后,做SHA256哈希得到签名值。
  • 前端发请求时,将时间戳和签名值放在自定义请求头(比如X-Sign、X-Timestamp)中,和接口请求一起发送到服务端。
  • 服务端收到请求后先做两层校验:第一判断请求带的时间戳和服务端当前时间差是否超过5分钟,超过直接返回403,避免签名被抓包后长期复用;第二用相同的规则重新计算签名,和请求携带的签名比对一致才返回数据。
  • 前端的签名逻辑代码可以用JS混淆工具做深度混淆,把相关逻辑转为可读性极差的乱码,进一步提高逆向破解签名规则的成本,普通爬虫开发者基本不会花大量精力去破解这类混淆逻辑。

附加防护(进一步过滤异常请求)

  • 配置IP限流规则,比如同一个IP1分钟内请求超过20次直接拉黑1小时,普通用户的正常浏览请求频率远低于这个阈值,高频爬虫会直接被拦截。
  • 增加请求特征校验,过滤缺少标准浏览器请求头、或者请求头特征明显属于爬虫(比如User-Agent带curl、python-requests等字段)的请求。

后续扩展适配

当前的签名机制可以无缝对接后续的登录体系,等后续需要上线登录功能时,直接把用户ID、用户token等信息加入签名的拼接规则中,即可实现用户级别的权限管控,不需要重构现有核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:45:01