如何使用 Flask CORS 将域列入白名单

Posted

技术标签:

【中文标题】如何使用 Flask CORS 将域列入白名单【英文标题】:How to whitelist domain using Flask CORS 【发布时间】:2020-04-08 12:23:48 【问题描述】:

我无法让 Flask CORS 将某些域列入白名单,使其无法执行 POST 请求。我正在从 www.google.com 发出 curl 请求,但使用域 googl.com 来确认帖子。

目前每篇文章都允许加入,因为我的 curl 是“Access-Control-Allow-Origin: *”

我只是希望能够确保只有一个设置的域可以发出 POST 请求

@app.route('/api/userreset', methods=['POST'])
@cross_origin(origin='http://www.googl.com')
    def resetFunction():


   curl --header "Content-Type: application/json"   --request POST "Origin: http://www.google.com" --verbose  --data '"email":"test@example.com"'   http://0.0.0.0:8080/api/userreset

我也尝试了以下没有做的事情:

cors = CORS(app, resources=r"/api/*": "origins": "http://www.googl.com")

POST的回复如下:

    *   Trying 0.0.0.0...
* TCP_NODELAY set
* Connected to 0.0.0.0 (127.0.0.1) port 8080 (#0)
> POST /api/userreset HTTP/1.1
> Host: 0.0.0.0:8080
> User-Agent: curl/7.64.1
> Accept: */*
> Content-Type: application/json
> Content-Length: 219
> 
* upload completely sent off: 219 out of 219 bytes
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Content-Type: text/html; charset=utf-8
< Content-Length: 55
< Access-Control-Allow-Origin: *
< Server: Werkzeug/0.16.0 Python/3.8.0
< Date: Mon, 16 Dec 2019 02:21:49 GMT

【问题讨论】:

【参考方案1】:

CORS 标头告诉浏览器允许访问哪些域。这并不是要完全限制对服务器的访问,而是告诉浏览器允许从哪些域访问服务器。仍然由浏览器来遵守。如果您从 CURL 执行此操作,它将始终有效,因为 curl 不像浏览器那样强制执行 CORS。

【讨论】:

好的,所以我使用 POSTMAN 也得到了相同的结果。没有办法通过flask_cors 限制域?或者无论如何都可以忽略 IP 白名单,并且通常不是 100% 安全的锁定单个域请求的方法? 根据我在看到您的回复后的理解,curl 会忽略 CORS,因为 CORS 是针对浏览器的,并且 API 需要身份验证才能确保安全,或者像任何开放 API 一样,如果我有任何请求都可以获得响应或 POST POST 打开。 Postman 基本上是 CURL 的 GUI。不,我不会指望 CORS 限制对某个域的访问。不一定会有您可以验证的可靠域名传入,但有一个 IP。听起来这会让你最接近你正在寻找的东西,这并不理想,除非你可以控制地址空间并确保它会保持静态。最好的方法是使用一些身份验证机制。实在太多不一一列举了,但是基本认证、摘要认证、api token、oauth、双向 TLS 都很常见。 是的,不幸的是我不控制请求来自的域,但这是我可以尝试查看的选项。谢谢! 是的,没错。再次查看您的示例,如果此用户重置端点将被浏览器击中,无需身份验证,并且此 api 位于发出请求的页面之外的另一个域上,那么您就在正确的轨道上。您需要 cors 标头才能正常工作,如果 cors 标头不正确,浏览器应阻止请求。但是,curl 和 postman 仍然可以工作,人们可以通过代码或更改浏览器安全设置等来使用端点。

以上是关于如何使用 Flask CORS 将域列入白名单的主要内容,如果未能解决你的问题,请参考以下文章

Firebase CORS,将 IP 范围列入白名单

Firebase 对列入白名单的链接说“域未列入白名单”

如何在 JWT 过滤器中将 api 列入白名单

如何将 AWS Beanstalk IP 列入白名单

如何使用CSP(内容安全策略)在WebForms项目中将动态创建的脚本列入白名单?

如何将 BootstrapVue 在 Nuxt.js 中使用 Purgecss 所需的所有内容列入白名单