Django CORS ORIGIN WHITELIST 和 ALLOWED_HOST 没有过滤任何东西[重复]

Posted

技术标签:

【中文标题】Django CORS ORIGIN WHITELIST 和 ALLOWED_HOST 没有过滤任何东西[重复]【英文标题】:Django CORS ORIGIN WHITELIST and ALLOWED_HOST not filtering anything [duplicate] 【发布时间】:2020-01-02 19:37:59 【问题描述】:

我正在尝试在同一个VPS 上部署一个 Django 应用程序(制作 REST APIs)和一个 React 应用程序(使用我的 APIs)。 我正在为 Django 设置 CORS,我仍然可以将我的 API 与邮递员一起使用,因为我不应该使用我的 API,因为我只允许我的 VPS IP and localhost

我已经尝试过 ALLOWED_HOSTS = ["\*"]CORS_ORIGIN_ALLOW_ALL = True 一切顺利,我可以在任何地方使用我的 API 但是现在当我用我的allowed hosts 替换"\*" 并将cors origin 设置为False 时,一切都没有改变。 我尝试从allowed hosts 和白名单中添加remove/set http,但没有任何改变。

CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = ["MYIP","127.0.0.1"]
ALLOWED_HOSTS = ["MYIP"]

我使用 python 3.6、django 2.2 和 react 16.8。 感谢您的帮助

【问题讨论】:

您是否将DEBUG 设置为false? CORS 是用于浏览器的标头。它们保护网络浏览器的用户。 CORS 并不是为了保护您的 API 免受不必要的访问。您需要为此使用其他方法。 像这样测试你的 CORS 标头:在另一个网站上嵌入一个调用你的 API 的脚本(例如,在你的机器上给你的本地主机另一个名字并在那里打开它)。然后尝试运行脚本。您会看到您的脚本从您的站点获取 OPTIONS,然后在您的浏览器中出现错误。但你永远不会在 postman 或 curl 中看到这一点。 【参考方案1】:

您不能使用 Postman 或 curl(在任何其他直接 HTTP 请求方法上)来测试 CORS。 CORS 旨在告诉网络浏览器(并且仅限网络浏览器)它们应该允许从网页中访问哪些资源。

这个想法是为了防止带有恶意站点.com 的人诱使用户访问该站点以从您的服务器(例如 iframe)获取资源,以便用户认为他们在您的网站实际上不是。

因此,您只能通过运行一个脚本来测试它,该脚本从不同域的网页中的 API 获取数据(从浏览器中)。

CORS 并不是为了让您的网站完全阻止访问。任何使用 curl(或邮递员)的机器仍然可以访问您的 API。

【讨论】:

这更有意义谢谢!因此,为了保护我的 API,令牌身份验证(具有生命周期)是否足够?

以上是关于Django CORS ORIGIN WHITELIST 和 ALLOWED_HOST 没有过滤任何东西[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Django CORS 拒绝访问,即使我设置了 CORS_ORIGIN_ALLOW_ALL = True

尽管将 AWS 静态文件路径添加到 CORS_ORIGIN_WHITELIST django-cors-headers,但出现 403 错误

Django CORS ORIGIN WHITELIST 和 ALLOWED_HOST 没有过滤任何东西[重复]

Django CORS Access-Control-Allow-Origin 丢失

dnago前后端分离如何解决跨域请求问题

来自 AngularJS 的 Django CORS API