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

Python Flask如何配置仅允许同服务器本地网络的请求访问接口

需求实现结论

这个需求无法做到100%绝对禁止第三方工具调用接口,但可以通过几个轻量方案大幅提高直接调用的门槛,对于小型个人项目、没有高价值数据的场景完全够用。


可用轻量方案(无需额外认证逻辑)

  • 方案1:校验请求来源的Referer/Origin头
    同一服务器部署的前端发起请求时,浏览器会自动携带Origin或者Referer头,值就是你前端页面的访问地址,你可以在Python后端的路由里加一层全局拦截,只允许这两个头的值匹配你前端地址的请求通过。
    以下是Flask框架的示例代码片段:

    from flask import Flask, request, abort
    
    app = Flask(__name__)
    # 替换为你自己的前端访问地址,同服务器部署一般是http://127.0.0.1或者绑定的域名
    ALLOWED_ORIGIN = "http://你的前端访问地址"
    
    @app.before_request
    def check_source():
        origin = request.headers.get("Origin")
        referer = request.headers.get("Referer")
        # 只要Origin匹配或者Referer前缀匹配就放行
        if not (origin == ALLOWED_ORIGIN or (referer and referer.startswith(ALLOWED_ORIGIN))):
            abort(403)
    

    这个方案完全不需要修改前端代码,后端仅需增加十几行逻辑即可实现,普通用户用Postman默认不会携带对应头信息,直接调用会直接被拦截。

  • 方案2:后端API仅监听本地环回地址,不对外网暴露端口
    如果你的前端静态资源和后端都部署在同一台服务器的Nginx/Apache服务下,可以直接让Python后端只监听127.0.0.1的端口,不绑定公网IP,这样外网根本无法直接访问到后端API端口,所有请求必须经过Nginx转发,你可以额外在Nginx层配置仅允许匹配前端地址的Referer请求转发到后端,安全性比纯后端校验更高。


方案局限性说明

上述方法都无法防住有一定技术基础的用户:Referer和Origin头都可以手动伪造,他人只要抓包拿到正常请求的头信息,在Postman里手动添加相同的头就能调用接口。但对于小型项目来说,几乎不会有人专门花功夫伪造头调用接口,足够覆盖你的当前需求。
如果后续项目数据价值提升,还是建议补充JWT等轻量认证逻辑,安全性会有本质提升。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:39:02